链接:https://leetcode.cn/problems/partition-list/
题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
思路:
- 定义四个链表结点用来存放原始链表的结点数据
smallHead =>小于target的头结点,同时也是返回结果
smallTail =>小于target的尾结点,在遍历数组后与大于target的头结点合并
bigHead =>大于target的头结点,用来合并smallTail
bigTail =>大于target的尾结点,在返回前需要处理改结点的原始的next结点 - 遍历原始链表分别将结点赋予到上述四个结点,遍历结束后做smallTail和bigHead结点的合并和bigTail结点的next结点数据处理
代码
public static ListNode partition(ListNode head, int x) {
ListNode smallHead =null;
ListNode smallTail=null;
ListNode bigHead =null;
ListNode bigTail =null;
ListNode temp = head;
while (temp!=null){
ListNode node =temp;
if (node.val<x){
if (smallHead==null){
smallHead=node;
}
if (smallTail==null){
smallTail=node;
}else {
smallTail.next=node;
smallTail=smallTail.next;
}
}else {
if (bigHead==null){
bigHead=node;
}
if (bigTail==null){
bigTail=node;
}else {
bigTail.next=node;
bigTail=bigTail.next;
}
}
temp=temp.next;
}
// 合并链表
if (smallTail!=null&&bigHead!=null){
smallTail.next=bigHead;
if (bigTail!=null){
bigTail.next=null;
}
}
if (smallHead==null) smallHead=head;
return smallHead;
}
作者小白,侵权请私信删
2022.11.09