zoukankan      html  css  js  c++  java
  • Partition List双色问题链表版

    [抄题]:

    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.

    [思维问题]:

    不知道怎么找链表最后一个元素,以为要循环。

    其实可以利用“指针节点”的思想,一直添加,最后自然就是最后一个了。

    [一句话思路]:

    高个节点链表和矮子节点链表拼起来即可。

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

     

    [一刷]:

    1. 要写corner case,还是要返回head
    2. 直接连接到右边head,因为右边的dummy不需要。
    3. 注意最后返回的是leftDummy.next

    [总结]:

    不需要像数组一样用logn空间的partition,直接左右添加就行

    [复杂度]:Time complexity: O(n) Space complexity: O(1不需要额外空间,就都是1

    [英文数据结构,为什么不用别的数据结构]:

    [其他解法]:

    [Follow Up]:

    [题目变变变]:

    2/3/4 colors

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode partition(ListNode head, int x) {
            if (head == null) {
                return head;
            }
            ListNode leftDummy = new ListNode(0);
            ListNode rightDummy = new ListNode(0);
            ListNode left = leftDummy;
            ListNode right = rightDummy;
            //two linked list
            while(head != null) {
                if (head.val < x) {
                    left.next = head;
                    left = left.next;
                }
                else {
                    right.next = head;
                    right = right.next;
                }
                head = head.next;
            }
            //join up
            right.next = null;
            left.next = rightDummy.next;
            
            return leftDummy.next;
        }
    }
    View Code
  • 相关阅读:
    View注入框架:Butterknife简单使用
    Android之——自己定义TextView
    算法练习--小球下落
    【MVC架构】——怎样利用Json在View和Controller之间传递数据
    ZOJ 3494 BCD Code (AC自己主动机 + 数位DP)
    排序算法之归并排序
    C++_关于const 的全面总结
    silent install oracle 11.2.0.1 x86_64 for linux
    struts2请求过程源代码分析
    Hadoop自学笔记(一)常见Hadoop相关项目一览
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8111570.html
Copyright © 2011-2022 走看看