鍊錶的中間節點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。這裡我們可以使用雙指標來實現;及乙個快指標(一次迭代跨越兩個節點)與乙個慢指標(一次迭代跨越乙個節點)當快指標進行到單鏈表的末尾時,慢指標剛好進行到了整個鍊錶的的一般,但注意示例2要求我們在偶數節點時返回靠後的那個中間節點,這時我們需要將塊指標的步驟查分開來,將慢指標穿插其中,在快指標第二次前進時再進行一次判斷;示例 1:
輸入:[1,2,3,4,5]
輸出:此列表中的結點 3 (序列化形式:[3,4,5])
返回的結點值為 3 。 (測評系統對該結點序列化表述是 [3,4,5])。
注意,我們返回了乙個 listnode 型別的物件 ans,這樣:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = null.
示例 2:
輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
由於該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。
struct listnode*
middlenode
(struct listnode* head)
}return low;
}
移除鍊錶元素刪除鍊錶中等於給定值 val 的所有節點。這裡與之前反轉鍊錶三指標法的思路有點相似,都是建立乙個prev變數來儲存前乙個節點,當前節點中一旦含有目標值,則立刻使前節點指向之後的節點並且釋放當前節點,但這裡有乙個問題我們需要注意:若直接使用這種方式當第乙個節點便含有目標數時,此時prev等於null,當之後我們訪問prev的成員時便會出錯,這裡我採用的方法是從第二個節點開始檢測,這樣prev節點一開始就賦成首節點,當檢測完後我們再單獨處理首節點:示例:輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
struct listnode*
removeelements
(struct listnode* head,
int val)
struct listnode* last = head;
struct listnode* go = head->next;
while
(go !=
null
)else}if
(head->val==val)
return head;
}
移除鍊錶元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 兩個引用,乙個指向頭結點,乙個指向頭結點的下乙個結點,要考慮頭結點為null的情況。遍歷鍊錶,當遇見和val相等的數,就直接把它刪掉,好要考慮當第乙個節點就是要刪除的節點時,直接h...
鍊錶中間節點
題目 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode ...
LeetCode 鍊錶 鍊錶的中間節點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的物件...