Partition List (Java)

来源:互联网 发布:知进退呼为神 编辑:程序博客网 时间:2024/06/04 03:53

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.

将链表分为小于3和大于等于3两个链表,并将他们合并。注意:新链表的末尾要指向null

Source

    public ListNode partition(ListNode head, int x) {        ListNode l1 = new ListNode(0);        ListNode l2 = new ListNode(0);        if(head == null || head.next == null) return head;                l1.next = head;        ListNode p,q;        q = l1;        p = head;        ListNode st = l2;        while(p != null){        if(p.val < x){        p = p.next;        q = q.next;        }        else{        st.next = p;        st = st.next;                q.next = p.next;        p = q.next;        }        }        st.next = null;  //新链表如果由老链表改编 一定要记得最后置null 否则很容易出错并造成死循环        q.next = l2.next;        return l1.next;    }


Test

    public static void main(String[] args){    ListNode a = new ListNode(1);    a.next = new ListNode(4);    a.next.next = new ListNode(3);    a.next.next.next = new ListNode(2);     a.next.next.next.next = new ListNode(5);     a.next.next.next.next.next = new ListNode(2);         ListNode b = new Solution().partition(a, 3);    while(b != null){    System.out.println(b.val);    b = b.next;    }    }


0 0