码迷,mamicode.com
首页 > 其他好文 > 详细

Partition List ——LeetCode

时间:2015-05-25 18:12:29      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

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.

 

题目大意:给定一个单链表和一个指定值,以指定值划分这个单链表,使得左半部分小于指定值,右半部分大于指定值,要求保持原顺序。

解题思路:首先找到第一个比x值大的元素,记录其前驱节点ptr,然后遍历单链表,大于x的跳过,小于x的接到ptr的后面,然后ptr=ptr.next。

   public ListNode partition(ListNode head, int x) {
        if (head==null||head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode ptr = dummy;
        ListNode pre = dummy;
        while(ptr!=null&&ptr.next!=null&&ptr.next.val<x){
            ptr=ptr.next;
            pre=pre.next;
        }
        while(pre.next!=null){
            ListNode tmp = pre.next;
            if(pre.next.val<x){
                ListNode curr = pre.next;
                pre.next=curr.next;
                curr.next=ptr.next;
                ptr.next=curr;
                ptr=ptr.next;
            }
            pre = tmp;
        }
        return dummy.next;
    }

 

Partition List ——LeetCode

标签:

原文地址:http://www.cnblogs.com/aboutblank/p/4528347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!