LeeteCode 鍊錶的中間節點

2021-10-05 15:14:59 字數 1196 閱讀 5629

給定乙個不帶頭結點的非空鍊錶,返回鍊錶的中間節點,如果有兩個中間節點,則返回第二個中間節點。

節點定義:

public

class

listnode

}

方法一:陣列法

遍歷一次鍊錶中的資料,將其全部傳入乙個陣列,然後直接訪問得到鍊錶的中間節點。

class

solution

;while

(a.back()

->next != null)

a.push_back

(a.back()

->next)

;return a[a.

size()

/2];

}}

時間複雜度:o(n),其中n為給定鍊錶中的節點數目。

空間複雜度:o(n),陣列用去空間。

方法二:單指標法

兩次遍歷,第一次遍歷獲得鍊錶長度,第二次遍歷取得中間節點。

class

solution

return pre;

}public

intgetlength

(listnode head)

return count;

}}

時間複雜度:o(n),其中n為給定鍊錶中的節點數目。

空間複雜度:o(1),存放變數和指標。

方法三:快慢指標法

使用快慢兩個指標遍歷鍊錶,快指標每次向後移動兩位,慢指標每次向後移動一位,這樣一來當快指標到鍊錶末尾或者為空時,慢指標正好指向中間節點。

class

solution

// fast一次走兩步,slow一次走一步

fast = fast.next.next;

slow = slow.next;

}return slow;

}}

時間複雜度:o(n),其中n為給定鍊錶中的節點數目。

空間複雜度:o(1),存放fast,slow兩個指標。

注意快慢指標的用法,類似的,快慢指標還可用於查詢鍊錶的倒數第k個節點。

LeeteCode 查詢鍊錶中倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。鍊錶節點的定義 definition for singly linked list.public class ...

LeetCode 鍊錶 鍊錶的中間節點

給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的物件...

鍊錶的中間插入

include include include 標頭檔案 struct node 設計結點的型別 struct node creat node int data 為每個結點申請空間 memset p,0,sizeof struct node 將分配到的空間初始化為0 p num data 給資料域和...