[路飞]_leetcode刷题_86. 分隔链表

193 阅读1分钟

「这是我参与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网友的解答,基本都是这个思路,可还行。