leetcode-cn.com/problems/re…java
給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。node
示例:算法
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
複製代碼
說明:bash
給定的 n
保證是有效的。spa
進階:指針
你能嘗試使用一趟掃描實現嗎?code
n
步,以後先後指針共同移動直到前面的指針到尾部爲止pre
的下一個節點指向head
,設前指針爲start
,後指針爲end
,兩者都等於pre
start
先向前移動n步start
和end
共同向前移動,此時兩者的距離爲n
,當start
到尾部時,end
的位置剛好爲倒數第n
個節點start.next != null
pre.next
,爲何不直接返回head
呢,由於head
有多是被刪掉的點/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = new ListNode(0);
pre.next = head;
ListNode start = pre, end = pre;
while(n != 0) {
start = start.next;
n--;
}
while(start.next != null) {
start = start.next;
end = end.next;
}
end.next = end.next.next;
return pre.next;
}
}
複製代碼
後臺回覆「算法」,加入每天算法羣 以爲算法直擊靈魂,歡迎點擊在看和轉發cdn