LeetCode刷题,分隔链表(86)

1,051 阅读1分钟

分隔链表

给你一个链表,和一个值x,请将小于x值的节点放在大于或等于x的节点之前。

解题代码

思路:使用两个链表,将大于等于x的值,连接到一个链表,小于x的值连接到另一个。最后连接两个链表即可

var partition = function(head, x) {
  if (!head) return null;
  let rs = new ListNode(); // 存放小于x
  let rb = new ListNode(); // 存放大于等于x
  let r1 = rs; // 小链表头指针
  let r2 = rb; // 大链表头指针
  let p = head; // 传入的链表
  let q;
  while (p) {
    q = p.next; // 存储下一个节点
    if (p.val < x){ // 小于x 存入r1
      p.next = null; // 断开连接
      r1.next = p; 
      r1 = p;  // 保证r1 是在链表的最后一个节点
    } else {
      p.next = null; // 断开连接
      r2.next = p;
      r2 = p; // 保证r2 是在链表的最后一个节点
    }
    p = q; // 原链表指向下一位,继续循环
  }
  r1.next = rb.next; // 连接两个链表 r1是小于尾节点,连接大于头节点
  return rs.next; // 返回存储小于链表头节点
};