题解 | #划分链表#
划分链表
http://www.nowcoder.com/practice/1dc1036be38f45f19000e48abe00b12f
划分链表的第三种解法
这第三中解法和第二种解法有一点类似,都是通过移动节点,一次遍历完成的。区别是第二种解法是将大块向后移动,第三种解法是将小块向前移动。不过,第三种解法比第二种解法更容易理解。
这两种的方法的移动节点的while循环条件有点不一样,可以思考思考。
使用双指针移动节点,虽然有点难,还是有套路的,还是要多写多练。
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
public ListNode partition (ListNode head, int x) {
// write code here
ListNode dummy=new ListNode(-1);
ListNode left=dummy;
left.next=head;
while(left.next!=null&&left.next.val<x){
left=left.next;
}
ListNode next=left.next;
ListNode right=next;
while(right!=null&&right.next!=null){
if(right.next.val<x){
left.next=right.next;
right.next=right.next.next;
left.next.next=next;
left=left.next;
}else{
right=right.next;
}
}
return dummy.next;
}
}