题目:
给你一个链表的头节点 head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5]
示例 2:
输入:head = [2,1], x = 2 输出:[1,2]
思路:直接遍历链表,小于X的放到一起,大于等于X的放到一起,然后串起来,采用尾插法放到一起
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode bs=null;
ListNode be=null;
ListNode as=null;
ListNode ae=null;
ListNode cur=head;
while(cur!=null){
if(cur.val<x){
if(bs==null){
//插入第一个结点
bs=cur;
be=cur;
}else{
be.next=cur;
be=be.next;
}
}else{
if(as==null){
as=cur;
ae=cur;
}else{
ae.next=cur;
ae=ae.next;
}
}
cur=cur.next;
}
//开始串起来
if(bs==null){//前半段为空
//第一个区间没有数据
return as;
}
//第一个区间有数据
be.next=as;
//第二个区间没有数据
if(as!=null){
//第二个区间有数据
ae.next=null;
}
return bs;
}
}