题目描述
给定值x将链表分割成两部分,比x小的在链表的前面部分,比x大的在链表的后面部分,不能改变原来的数据结构
思路
- 创建两个新的链表(为了方便插入元素,使其带傀儡节点):smallList,largeList
- 遍历链表,比x小的,插入到smallList链表的末尾,比x大的插入到largeList的末尾
- 最终合并两个链表
代码
public class Solution6 {
public ListNode partition(ListNode pHead, int x) {
if(pHead==null||pHead.next==null){
return pHead;
}
ListNode smallList=new ListNode(0);
ListNode sHead=smallList;
ListNode sTail=smallList;
ListNode largeList=new ListNode(0);
ListNode lHead=largeList;
ListNode lTail=largeList;
for(ListNode cur=pHead;cur!=null;cur=cur.next){
if(cur.val<x){
sTail.next=new ListNode(cur.val);//为了不改变原来的数据结构,创建新的节点
sTail=sTail.next;
}else{
lTail.next=new ListNode(cur.val);//为了不改变原来的数据结构,创建新的节点
lTail=lTail.next;
}
}
sTail.next=lHead.next;
return sHead.next;
}
}