当前位置:网站首页>分隔链表(建两个空链表)
分隔链表(建两个空链表)
2022-04-22 08:17:00 【学海无涯苦作舟呀】
题目链接:https://leetcode-cn.com/problems/partition-list/
题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
解题思路:
这题我们只需维护两个链表 small 和 large 即可。
small 链表按顺序存储所有小于 x 的节点,large 链表按顺序存储所有大于等于 x 的节点。遍历完原链表后,我们将 small 链表尾节点指向 large 链表的头节点即能完成对链表的分隔。
我们设 smallHead 和 largeHead 分别为两个链表的哨兵节点,即它们的 next 指针指向对应链表的头节点,这样做的目的是为了更方便地处理头节点为空的边界条件。
开始时,smallhead指向small,largehead指向large,随后,从前往后遍历链表,判断当前链表的节点值是否小于 x,如果小于就将small 的next 指针指向该节点,否则将 large 的next 指针指向该节点。
遍历结束后,我们将 large.next 指针置空,这是为了防止产生环。同时将 small.next指向largehead.next,即真正意义上的 large 链表的头节点。最后返回smallHead.next 指针即为我们要求的答案。
代码如下:
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode small = new ListNode(-1);
ListNode large = new ListNode(-1);
ListNode smallhead = small;//哨兵节点
ListNode largehead = large;//哨兵节点
while(head != null){
if(head.val < x){
small.next = head;
small = small.next;
}else{
large.next = head;
large = large.next;
}
head = head.next;
}
large.next = null;//防止形成环
small.next = largehead.next;
return smallhead.next;
}
}
版权声明
本文为[学海无涯苦作舟呀]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46184836/article/details/124274839
边栏推荐
猜你喜欢
随机推荐
Install_ FAILED_ MISSING_ SHARED_ LIBRARY
一棵开始成长的树
goto语句
C language variable parameter usage
Suspended else problem
Quick sequencing and optimization
初识C语言~循环语句
Android Development - SQLite and sqlitedatabase Application Experiment 6 notes
鲜为人知的“ 三字母词 ”
The server is set to start automatically and regularly
【系统分析师之路】2020年下系统分析师案例分析真题
关于我想借款却被骗了一万五这件事
Advanced usage skills of nmap
==与equals
The essence of array parameters
如何清空输入缓冲区
找工作、写简历到面试,这套资料就够了!
Learning objectives and general contents of C language
LeetCode 1450 - 1453
什么产品都还没有 马斯克的“无聊公司”估值已高达57亿美元


![C language to realize [shutdown program]](/img/b3/0364fda1bc27d754dd11eec055979d.jpg)






![Binary search [detailed explanation]](/img/a0/0ae626b4b8cc742fccde3bd7c3e4a4.png)