C/C++教程

LeetCode_86.分隔链表

本文主要是介绍LeetCode_86.分隔链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目描述

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

在这里插入图片描述

代码实现

class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode smallHead = new ListNode(0);
        ListNode smallCurr = smallHead;
        ListNode bigHead = new ListNode(0);
        ListNode bigCurr = bigHead;
        
        while(head!=null){
            if(head.val < x) {
                smallCurr.next=head; smallCurr=smallCurr.next;
                }
            if(head.val >= x) {
                bigCurr.next = head;
                bigCurr=bigCurr.next;
                }    
            head=head.next;
        }
        //遍历结束后,我们将 large 的 next 指针置空,这是因为当前节点复用的是原链表的节点
        //,而其 next 指针可能指向一个小于x的节点,我们需要切断这个引用。
        bigCurr.next=null;
        smallCurr.next=bigHead.next;
        return smallHead.next;
    }
}
这篇关于LeetCode_86.分隔链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!