1

LeetCode 86. 分隔链表

大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。

开始今天的正题。

leetCode86.分隔链表

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例 1:

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

解法:

1.分割法

思路:

  1. 整体思路 设立两个链表 遍历head,比x小的存一个,比x大的存一个,把俩个链表拼接起来

注意点:设立的链表开头都是 -1 拼接的时候记得使用maxHead.next 把这个头节点忽略掉

let partition = function(head, x) {
    let minHead = new ListNode(-1);
    let minPoint = minHead;
    let maxHead = new ListNode(-1);
    let maxPoint = maxHead;
    let p = head;

    while(p){
        if(p.val < x){
            minPoint.next = p;
            minPoint = minPoint.next;
        } else {
            maxPoint.next = p;
            maxPoint = maxPoint.next;
        }
        p = p.next;
    }
    maxPoint.next = null 
    minPoint.next = maxHead.next; // 注意这里操作的是maxHead的next maxHead是 -1 -> .... 
    return minHead.next;
};

结合我的分析你是不是对这道题有了更清晰的认识了呢?

以上就是我的思路以及解法了,希望大家喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)


灵魂画师_茄子
11 声望4 粉丝