「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
分隔链表
题目:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
思路:
遍历整个链表,把小于x的放到一个链表中,把大于x的再放到一个链表中,然后,将小的链表的尾节点的指针指向大链表的头节点。
实际操作起来,先申明一个little和larger链表,由于两者的头节点都不确定,所以我们让两个链表的头节点分别都是伪头节点。然后再申明两个头节点littleHead和largerHead,让伪头节点的next分别指向littleHead和largerHead。这里这个littleHead主要是记录一下little的头节点,函数结尾return的实际就是它。lagerhead主要是为了记录一下larger的头节点,为了让little的尾节点指向它。
好了,话不多说,上代码。
代码:
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function(head, x) {
let little = new ListNode(0);
let larger = new ListNode(0);
let littleHead = little;
let largerHead = larger;
let cur = head;
while(cur){
if(cur.val < x){
little.next = cur;
little = little.next;
}else{
larger.next = cur;
larger = larger.next;
}
cur = cur.next;
}
larger.next = null;
little.next = largerHead.next;
return littleHead.next;
};
题解
看了leetcode网友的解答,基本都是这个思路,可还行。