LintCode - 鏈表劃分(普通)

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

難度:容易
要求:

給定一個單鏈表和數值x,劃分鏈表使得所有小于x的節點排在大于等于x的節點之前。你應該保留兩部分內鏈表節點原有的相對順序。
樣例
給定鏈表 1->4->3->2->5->2->null,并且 x=3返回** 1->2->2->4->3->5->null**

思路
多指針偏移

/**
     * @param head: The first node of linked list.
     * @param x: an integer
     * @return: a ListNode 
     */
    public ListNode partition(ListNode head, int x) {
        if(head == null){
            return null;
        }
        
        ListNode dummy = new ListNode(0);
        ListNode prev = dummy;
        dummy.next = head;
        ListNode target = null;
        ListNode tmp = null;
        while(prev.next != null){
            if(target == null){
                if(x <= prev.next.val){
                    target = prev.next;
                    tmp = prev.next;
                }else{
                    prev = prev.next;
                }
            }else{
                if(tmp.next == null){
                    break;
                }
                if(tmp.next.val < x){
                    prev.next = tmp.next;
                    prev = prev.next;
                    tmp.next = tmp.next.next;
                }else{
                    tmp = tmp.next;
                }
            }
        }
        
        if(target != null){
            prev.next = target;
        }
        return dummy.next;
    }

思路
分2個鏈表,這樣思路比較清晰

public ListNode partition(ListNode head, int x) {
        if (head == null) {
            return null;
        }
        
        ListNode leftDummy = new ListNode(0);
        ListNode rightDummy = new ListNode(0);
        ListNode left = leftDummy;
        ListNode 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;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 3.10 69.給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問) 二叉樹的層次遍歷樣例給一棵二叉樹 {3...
    mytac閱讀 1,097評論 3 3
  • 【聲明】歡迎轉載,但請保留文章原始出處→_→文章來源:http://www.lxweimin.com/p/08d08...
    夢工廠閱讀 3,787評論 3 31
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 想變成一個漂亮的小姐姐 今天被夸瘦了 好開心 拍的武漢的照片好像大家覺得很好看 天氣可真熱 好喜歡PGone這種類...
    PearlParis閱讀 374評論 0 0