Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in each of the two partitions.For example,Given 1->4->3->2->5->2 and x = 3,return 1->2->2->4->3->5.这道题的思路是用两个list,分别记录的是节点值<x的,以及其他的。最后需要设置bigp.next == null, 是为了防止出现环。因为可能最后的一个node跟之前的某个节点相连,所以要设置最后一个节点的next = null。
代码:
public ListNode partition(ListNode head, int x) {
if(head == null) return null;
ListNode small = new ListNode(-1);
ListNode big = new ListNode(-1);
ListNode p = head;
ListNode smallp = small;
ListNode bigp = big;
while(p != null){
ListNode temp = p.next;
if(p.val<x){
smallp.next = p;
smallp = smallp.next;
}else{
bigp.next = p;
bigp = bigp.next;
}
p = temp;
}
bigp.next = null;
smallp.next= big.next;
return small.next;
}