原文:86. 分隔链表(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-086/

题目:

难度:Middle

相关话题:链表双指针

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

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

思路:

建立一个链表头less和链表头greater,遍历链表head,如果head.val<x,放入less中,如果head.val>=x放入greater中。

最后合并lessgreater

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} x
 * @return {ListNode}
 */
var partition = function(head, x) {
  let node=new ListNode(0),less=node,
      node2=new ListNode(0),greater=node2
  while(head){
    if(head.val<x){
      less.next=head
      less=less.next
    }else{
      greater.next=head
      greater=greater.next
    }
    head=head.next
  }
  less.next=node2.next
  greater.next=null
  return node.next
};