【LeetCode】 刪除鏈表的倒數第 N 個節點

題目描述指針

給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。rem

示例:io

給定一個鏈表: 1->2->3->4->5, 和 n = 2.ast

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.class

說明:List

給定的 n 保證是有效的。進階

進階:遍歷

你能嘗試使用一趟掃描實現嗎?im

題目解析:鏈表

採用雙重遍歷確定是能夠解決問題的,可是題目要求咱們 一次遍歷解決問題,那咱們的思路得散發一下。

咱們能夠設想假設設定了雙指針p和q,當q指向末尾的NULL時,p和q之間相隔的元素個數爲n時,那麼刪除掉p的下一個指針就完成了要求。

1.設置虛擬節點dummyHead指向head

2.設定雙指針p和q,初始都指向虛擬節點dummyHead

3.移動q,直到p和q之間相隔的元素個數爲n

4.同時移動p與q,知道q指向的爲NULL

5.將p的下一個節點指向下下一個節點。


public class Solution3 {

public ListNode removeNthFromEnd(ListNode head, int n) {

//建立一個虛擬頭結點

ListNode dummy = new ListNode(-1);

dummy.next =head;

ListNode fast = dummy;

ListNode slow = dummy;

while(fast !=null && n>-1){

fast = fast.next; n--;

}

while(fast!=null){

fast = fast.next;

slow = slow.next;

}

slow.next = slow.next.next;

return dummy.next;

}

}

相關文章
相關標籤/搜索