面试题 02.04. 分割链表

125 阅读1分钟

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

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

  const dummyLT = new ListNode(-1, null)
  const dummyMT = new ListNode(-1, null)
  let cur = head
  let curLt = dummyLT
  let curMt = dummyMT
  while(cur) {
    let next = cur.next
    cur.next = null
    if (cur.val < x) {
      // 小于x的值放入dummyLT链表中
      curLt = curLt.next = cur
    } else {
      // 大于x的值放入dummyMT链表中
      curMt = curMt.next = cur
    }
    cur = next
  }
  // 拼接小大链表
  curLt.next = dummyMT.next
  // 返回小链表的头节点
  return dummyLT.next
};