給定乙個不帶頭結點的非空鍊錶,返回鍊錶的中間節點,如果有兩個中間節點,則返回第二個中間節點。
節點定義:
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 給資料域和...