1. 程式人生 > >LeetCode主題整理(4)連結串列及相關問題

LeetCode主題整理(4)連結串列及相關問題

Topic 1 反轉連結串列

Reverse Linked List II在第m~n個節點中反轉單鏈表,注意這道題可以把程式碼寫得很長,如果分為區間一[0,m-1],區間二[m-n],區間三[n+1,end]這三個區間的話。也可以寫得很短,如果仔細觀察發現其實只需要考慮第一個區間是否為NULL就可以了。

Reverse Nodes in K Group
每K個節點為一個單位,反轉第1個單位之後,反轉第2個單位,反轉第i個單位,反轉最後一個單位,如果最後一個單位不足K個,就不進行反轉。非常有意思的一道題目,依然可以寫得很短,也可以寫得很長。如果你用遞迴的辦法去寫,可以很快寫完。如果你用迭代的辦法去寫,都會比較長。不管是否是呼叫了

Reverse Linked List II中的函式,或者直接寫一個大迴圈。

Reorder List
仔細觀察後,發現本題的規律是,把連結串列後半段反轉,然後依次插入到連結串列的前半段。

Topic 2 從陣列排序遷移到連結串列排序

Partition
用連結串列來模擬快排中的partition

Sort List
用連結串列來進行歸併排序,完成時間複雜度為O(N lgN),空間複雜度為O(1)的排序

Topic 3 環形連結串列

Topic 4 其它問題


拷貝連結串列,連結串列的節點除了有next指標,還有random指標,指向任意一個點。

去掉連結串列中的重複元素,使得原來連結串列中的非重複元素都出現並且只出現一次,重複元素不出現。

相關推薦

LeetCode主題整理(4)連結串列相關問題

Topic 1 反轉連結串列 Reverse Linked List II在第m~n個節點中反轉單鏈表,注意這道題可以把程式碼寫得很長,如果分為區間一[0,m-1],區間二[m-n],區間三[n+1,end]這三個區間的話。也可以寫得很短,如果仔細觀察發現其實只需要考慮第一

java連結串列實現leetcode

package leetcode; public class AddTwoNumbers { /** * 兩個連結串列相加 * input: (2 -> 4 -> 3) +(5->6->4) * output: 7->0->8

LeetCode 連結串列操作相關(一)

連結串列操作對於我來說是一個相對薄弱的環節,需要好好練習。 一、刪除連結串列中的節點 刪除指定節點這種題目是連結串列的基本操作,本題題目如下: 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 -- he

leetcode】環形連結串列拓展

                                              環形連結串列及拓展 一、要求 給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 節點類: class ListNode {

LeetCode-114.二叉樹展開為連結串列相關話題:深度優先)

給定一個二叉樹,原地將它展開為連結串列。 例如,給定二叉樹 1 / \ 2 5 / \ \ 3 4 6 將其展開為: 1 \ 2 \ 3 \ 4 \ 5

LeetCode 連結串列翻轉相關(24 25)

思路 連結串列反轉這種題,上個星期我還是不會做的,但是自從學會了前插法,寫起來就遊刃有餘的。 下面介紹下前插法 新建一個空節點作為反轉連結串列的表頭 將待反轉連結串列的頭結點取出,用一個指標指向頭結點的下一個結點,然後將頭結點指向新連結串列的表頭 新連結串列的

Leetcode 234. 迴文連結串列(進階)

題目描述: 請判斷一個連結串列是否為迴文連結串列。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階: 你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?   &nbs

LeetCode】 237. 刪除連結串列中的節點

1.題目 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 – head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9 示例 1: 輸

LeetCode 328. 奇偶連結串列(Odd Even Linked List)

題目描述 給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。 請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 O(1),時間複雜度應為 O(nodes),nodes 為節點總數。 示例1

LeetCode 83. 刪除排序連結串列中的重複元素(Remove Duplicates from Sorted List)

題目描述 給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。 示例1: 輸入: 1->1->2 輸出: 1->2 示例2: 輸入: 1->1->2->3->3 輸出: 1->2->3 解題思

有環連結串列以此為基礎的一些問題

連結串列有環及其延伸問題         首先,問題涉及的有環連結串列是指連結串列的尾節點不是null,而是指向連結串列中的其中一個節點,從而使得連結串列的其中一段是迴圈的,如果用圖的話可以得到這樣的資料結構: 那麼基於這樣的資料結構有一系列

[Leetcode] 82. 刪除排序連結串列中的重複元素 II java

 給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 

[Leetcode] 328. 奇偶連結串列 java

給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。 請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 O(1),時間複雜度應為 O(nodes),nodes 為節點總數。 示例 1: 輸入: 1-&

C語言高階篇 - 4.連結串列&狀態機與多執行緒

1.連結串列的引入 1、從陣列的缺陷說起         (1)陣列有2個缺陷,一個是陣列中所有元素的型別必須一致;第二個是陣列的元素個數必須事先制定並且一旦指定之後不能更改。         (2)如何解決

LeetCode 83 刪除排序連結串列中的重複元素 ---python

給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 # D

Leetcode---83. 刪除排序連結串列中的重複元素

給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 -----

Leetcode 142:環形連結串列 II(最詳細的解法!!!)

給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null。 **說明:**不允許修改給定的連結串列。 進階: 你是否可以不用額外空間解決此題? 解題思路 這是之前問題Leetcode 141:環形連結串列(最詳細的解法!!!)的提高,我們還

Leetcode 141:環形連結串列(最詳細的解法!!!)

給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 解題思路 一個最簡單的做法就是將連結串列反轉,我們看連結串列反轉後有什麼問題,關於連結串列反轉可以看這篇Leetcode 206:反轉連結串列(最詳細解決方案!!!)。 1 -> 2

leetcode 234. 迴文連結串列(Easy)(連結串列)

題目: 請判斷一個連結串列是否為迴文連結串列。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階: 你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題? 思路

LeetCode題目--迴文連結串列(python實現)

題目 請判斷一個連結串列是否為迴文連結串列。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階: 你能否用 O(n) 時間複雜度和 O(1)