[面试题 02.04]. 分割链表(43)-> 跟之前 [86] 分隔链表(12)

84 阅读1分钟

这道题之前写过,理解的还算可以,思路还在,开始写代码,写成下面的情况,解决不了了,返回的left,ringt都是最后一个符合要求的,之前符合要求的没有拼接在一块儿,如下图 image.png 又去看之前写过的题 [86]分隔链表(12), 重新接着补全

这道题最后都已经写迷糊了..

var partition = function(head, x) {
    // 定义成两个连表
    let slist = new ListNode(-1);
    let blist = new ListNode(-1);

    // 定义左右以后还需要 新建造一个变量 防止上面left和right两个节点丢失
    let smallHead = slist;
    let bigHead = blist;

    let cur = head;
    // 循环拆分 左右两个连表
    while(cur){
        // const tempNext = cur.next;
        if(cur.val >= x) {
            blist.next = cur;
            // 少了一这一步 右移动指针 为下一次循环做主播内
            blist = blist.next;
        } else {
            slist.next = cur;
            // 看之前记录说是这个可以直接写成 left = cur,这个 我第二遍在解决的时候 想到了 但是没有修改对
            slist = slist.next;
        }
        // cur.next = null;
    
        cur = cur.next;
    }

    // 最右边的后边滞空
    blist.next = null;

    console.log(slist, blist, smallHead, bigHead)
    console.log(slist.next, blist.next)

    // 最后拼接两个连表 同时将small的next指针指向largeHead的next指针指向的节点,即真正意义上的large链表的头节点。

    slist.next = bigHead.next;


    return smallHead.next;

};

下面的打印,slist.next是null 意思是把,这次上面的命名方式还是不恰当 刚好相反,还是从本质上不太理解

image.png