LeetCode Partition List(链表分段)

来源:互联网 发布:软件工程硕士院校排名 编辑:程序博客网 时间:2024/05/15 12:23

题意:给出一个单链表,有参数的数x。将比x小的数排在比x大的数据后面

思路:类似于快速排序的分段处理。为了简单操作,在单链表前加个头结点。注意,在处理时,如果当前处理结点与被替换结点为同一结点结,两个都下移,否则会出现环     

代码如下:

 

class Solution{    public ListNode partition(ListNode head, int x)    {        if (null == head || null == head.next) return head;        ListNode dummy = new ListNode(0);        dummy.next = head;        ListNode p = dummy, cur = dummy;        while (cur != null && cur.next != null)        {            if (cur.next.val < x)            {                if (cur == p)                {                    p = p.next;                    cur = cur.next;                    continue;                }                ListNode tmp = cur.next;                ListNode next = p.next;                cur.next = cur.next.next;                p.next = tmp;                tmp.next = next;                p = p.next;                continue;            }            cur = cur.next;        }        return dummy.next;    }}

0 0
原创粉丝点击