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

lintcode 容易题:Partition List 链表划分

时间:2015-10-18 20:01:57      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:

题目:

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。

你应该保留两部分内链表节点原有的相对顺序。

样例

给定链表 1->4->3->2->5->2->null,并且 x=3

返回 1->2->2->4->3->5->null

解题:

上面返回的结果好多不对的应该是: 1->2->2->3->4->5->null

想了好久不知道怎么搞,九章看到的程序,竟然搞两个链表链接起来。。。

Java程序:

技术分享
/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @param x: an integer
     * @return: a ListNode 
     */
    public ListNode partition(ListNode head, int x) {
        // write your code here
        if(head == null) return null;
        ListNode leftDummy = new ListNode(0);
        ListNode rightDummy = new ListNode(0);
        ListNode left = leftDummy, right = rightDummy;
        
        while (head != null) {
            if (head.val < x) {
                left.next = head;
                left = head;
            } else {
                right.next = head;
                right = head;
            }
            head = head.next;
        }
        
        right.next = null;
        left.next = rightDummy.next;
        return leftDummy.next;
        
    }
    
}
View Code

总耗时: 1573 ms

Python程序:

技术分享
"""
Definition of ListNode
class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    """
    @param head: The first node of linked list.
    @param x: an integer
    @return: a ListNode 
    """
    def partition(self, head, x):
        # write your code here
        if head == None:
            return head
        lefthead = ListNode(0)
        righthead = ListNode(0)
        left = lefthead
        right = righthead
        while head!=None:
            if head.val<x:
                left.next = head 
                left = left.next
            else:
                right.next = head
                right = right.next
            head = head.next
        right.next = None
        left.next = righthead.next
        return lefthead.next 
View Code

总耗时: 517 ms

和Java的有点小区别但是没有影响的。

lintcode 容易题:Partition List 链表划分

标签:

原文地址:http://www.cnblogs.com/theskulls/p/4889916.html

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