分割链表
将一个链表按X的大小,将小于X的结点放在X结点的左边,大于等于的在右边
解决方法:建立两个新链表,分别用来存储大于等于X及小于X的结点,最后进行拼接
1.首先分别建立两个新链表及指向两个新链表最后一个元素的引用
Node smaller=null;
Node bigger=null;
Node lastSmall=null;
Node lastBig=null;
Node cur=head;//遍历链表
2.遍历链表根据条件查找结点
while(cur!=null){
if(cur.val<x){
....
}else{
....
}
}
3.将查找到的结点进行尾插(尾插时需要当前链表是否为空),插入新的链表
例如插入比他小的结点中
Node next=cur.next;
if(small==null){
small=cur;
}
else
lasts.next=cur;
lasts=cur;
cur=next;
4.总代码
public Node partition(Node head,int x){
Node small=null;
Node big=null;
Node cur=head;
Node lasts=null;
Node lastb=null;
while(cur!=null){
if(cur.val<x){
Node next=cur.next;
if(small==null){
small=cur;
}
else
lasts.next=cur;
lasts=cur;
cur=next;
}//将节点插入small链表中
else{
Node next=cur.next;
if(big==null){
big=cur;
}
else
lastb.next=cur;
lastb=cur;
cur=next;
}//将节点插入big链表中
}
if(lasts==null)
return big;//遍历完之后,若small内无节点,则返回big链表
else if(lastb==null)
return small;//遍历完之后,若big内无节点,则返回small链表
else
lasts.next=big;//否则进行拼接
return small;
}