题目:
难度: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
中。
最后合并less
和greater
。
/**
* @来源: 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
};