leetcode刷題---熱門百題---刪除連結串列的倒數第n個節點
阿新 • • 發佈:2021-02-11
給你一個連結串列,刪除連結串列的倒數第 n 個結點,並且返回連結串列的頭結點。
進階:你能嘗試使用一趟掃描實現嗎?
輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
示例 2:
輸入:head = [1], n = 1
輸出:[]
示例 3:
輸入:head = [1,2], n = 1
輸出:[1]
提示:
連結串列中結點的數目為 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
下面是自己寫的程式碼,思路就是用兩個指標,然後中間間隔n個,這樣快的指標到最後的時候,慢的指標剛好是倒數第n個的前一個,再進行刪除即可.
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = new ListNode();
pre.next = head;
ListNode cur = head;
ListNode bac = pre;
int now = 0;
while(cur != null){
cur = cur.next;
if(now >= n ){
bac = bac.next;
}
now++;
}
bac.next = bac.next.next;
return pre.next;
}
}
下面是題解的程式碼,思路是一樣的,不過寫的方法不一樣,感覺更好理解點
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
ListNode first = head;
ListNode second = dummy;
for (int i = 0; i < n; ++i) {
first = first.next;
}
while (first != null) {
first = first.next;
second = second.next;
}
second.next = second.next.next;
ListNode ans = dummy.next;
return ans;
}
}
作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。