LeetCode系列:(86) 鏈表分割 Java版

題目鏈接:https://leetcode.com/problems/partition-list/

說明

1:環境 windows10
2:編輯器 IDEA
3:時間:2019-6-15
4:LeetCode 86 題:鏈表分割

題目要求

給定鏈表和值x,對其進行分區,使得小於x的所有節點都在大於或等於x的節點之前。
您應該保留兩個分區中每個分區中節點的原始相對順序。

Example:  
Input: head = 1->4->3->2->5->2, x = 3  
Output: 1->2->2->4->3->5  

解題思路

1:創建兩個臨時頭結點,我這裏命名爲 less_head 和 more_head,再創建兩個節點,less_ptr和more_ptr,分別指向less_head和more_head,用於在鏈表上移動
2:遍歷鏈表,使用判斷條件,如何鏈表中數據域數值小於x,則把該節點鏈接到less_head的後面,同理如果大於或等於,則鏈接到more_head後面
3:就是一些,節點的移動,比如說,(1)原鏈表的head 要指向head的下一個節點,(2)less_ptr 和 more_ptr指向鏈接後的節點。

圖片解釋

在這裏插入圖片描述

代碼

public ListNode partition(ListNode head, int x) {
        ListNode less_head = new ListNode(0);    // 創建一個less_head 節點
        ListNode more_head = new ListNode(0);    // 創建一個more_head 節點
        ListNode less_ptr = less_head;    // less_ptr 節點指向 less_head
        ListNode more_ptr = more_head;    // 同理
        while (head != null){// 遍歷原鏈表
            if (head.val < x){ // 判斷 原鏈表的值與x值得大小
                less_ptr.next = head;//將 節點鏈接在less_ptr 後面
                less_ptr = head;// less_ptr指向鏈接後的節點
            }
            else {
                more_ptr.next = head;
                more_ptr = head;
            }
            head = head.next; // head向後移動
        }
        // 將 分段後的連表串聯起來
        less_ptr.next = more_head.next;
        more_ptr.next = null; // 最後一個節點的next至爲空
        return less_head.next;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章