题目:
给定x,将链表中小于x的结点放到前面,等于大于x的结点放到后面,分割后保持原来的相对顺序不变。
思路:
1.题目中需要把小于x和大于等于x的结点划分开,那我们就创建俩个新的链表,一个用来存放小于x的结点,一个用来存放大于x的结点。
2.遍历链表,将小于x的结点尾插至less中,大于等于x的结点尾插至more中。
3.遍历结束后,如果less链表为空,直接输出great链表。如果more链表为空,直接返回less链表。
4.都不为空时,让less链表的最后一个结点的next为more的头结点。
注意:在连接俩个链表时,我们需要less链表的最后一个结点,所以我们需要定义一个lessLast来记录less链表的最后一个结点。more链表同理。
尾插算法:
Node cur = head;
while(cur != null){
if(cur.val<x){
if(less == null){
less = cur;
}else{
lessLast.next = cur;
}
lessLast = cur;
}else{
if(more == null){
more = cur;
}else{
moreLast.next = cur;
}
moresLast = cur;
}
cur = cur.next;
}
输出结果:
if(less == null){
return more;
}else{
if(more == null){
return less;
}
lessLast.next = more;
}
return less;
完整程序:
https://github.com/WangWenQian12/Java_Practice/blob/master/JavaSE/IDEA/LinkedList/Partition/src/Partition.java