[路飞]leetcode-02.04.分割链表

75 阅读1分钟

给你一个链表的头节点 head 和一个特定值 **x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。力扣原文

示例 1:

输入: head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入: head = [2,1], x = 2
输出:[1,2]

//题目理解将大于等于k的几点方到后边,且顺序不变

解题思路,将大于等于的放到一个新节点,然后将旧节点的的末端节点指向新节点

function ListNode(val,next) {
    this.val = val;
    this.next = next||null;
}
 var partition = function(head, x) {
  let big=new ListNode(-1),bigCur=big;
  empty=new ListNode(-1,head);pre=empty,cur=pre.next;
  while(cur){
      if(cur.val>=x){
        bigCur.next=cur;
        pre.next =cur.next
        cur.next=null
        cur= pre.next
        bigCur=bigCur.next
       
      }else{
        pre=cur
        cur=pre.next
      }
  }
  pre.next=big.next
  return empty.next
};