• lintcode :Partition List 链表划分


    题目:

    给定一个单链表和数值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的有点小区别但是没有影响的。

  • 相关阅读:
    正向代理和反向代理
    CFree5构建中止问题
    [转]Prototype核心成员的反思
    解决js文件乱码问题
    【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法
    rem 搭配 less 适配
    中国近代史-蒋廷黻
    docker 生成镜像 上传到docker hub
    CMD 执行 Python 脚本 出现假死状态
    vue 创建项目的两种方式
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4889916.html
Copyright © 2020-2023  润新知