[路飞][LeetCode]86_分隔链表

389 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

题目地址

题目

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

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

image.png

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

示例 2:

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

提示:

  • 链表中节点的数目在范围 [0, 200] 内
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

解题思路

  • 将链表分成两个链表,分别为小于x的小链表和大于等于x的大链表
  • 将小链表与大链表连接即可完成解题

解题代码

var partition = function(head, x) {
    if(!head||!head.next) return head
    let vnodeBig = new ListNode(-1,head)
    let vnodeSmall = new ListNode(-1,head)
    let big = vnodeBig
    let small = vnodeSmall
    while(head){
        if(head.val<x){
            small.next = head
            small = small.next
        }else{
            big.next =head
            big = big.next
        }
        head = head.next
    }
    big.next = null
    small.next = vnodeBig.next
    return vnodeSmall.next
};

如有任何问题或建议,欢迎留言讨论!