这道题之前写过,理解的还算可以,思路还在,开始写代码,写成下面的情况,解决不了了,返回的left,ringt都是最后一个符合要求的,之前符合要求的没有拼接在一块儿,如下图
又去看之前写过的题 [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 意思是把,这次上面的命名方式还是不恰当 刚好相反,还是从本质上不太理解