鍊錶演算法面試題 刪除鍊錶倒數第N個節點

2021-10-25 21:42:51 字數 1338 閱讀 4458

給你乙個鍊錶,刪除鍊錶的倒數第 n 個結點,並且返回鍊錶的頭結點。

由於單向鍊錶沒有指向前乙個節點的指標,所以如果要刪除倒數第n個節點,我們就必須先遍歷一次鍊錶,記錄鍊錶的長度,再遍歷刪除。

我們可以先將鍊錶反轉,這樣一來題目就等於變成了刪除正數第n個節點,那我們就可以直接遍歷到第n個節點,然後原地刪除,最後只需要再將鍊錶反轉回來即可。

public

class

code

system.out.

println

(c.removenthfromend

(head,1)

);}public listnode removenthfromend

(listnode head,

int n)

//反轉鍊錶

listnode pre = null;

listnode cur = head;

while

(cur != null)

//如果是要刪除最後乙個節點,則無需遍歷,直接指向next即可

if(n ==1)

else

//刪除

pnode.next = cnode.next;

}//再反轉回來

listnode pre2 = null;

listnode cur2 = pre;

while

(cur2 != null)

return pre2;

}}

雙指標法,類似快慢指標的道理,讓第乙個指標先走n步,然後再和第二個指標一起走,當第乙個指標走到底時,第二個指標剛好來到n位置

public

class

code

system.out.

println

(head)

; system.out.

println

(c.removenthfromend

(head,1)

);}public listnode removenthfromend

(listnode head,

int n)

//第二個指標

listnode snode = dummy;

//然後兩個指標在一起走,當第乙個指標走完的時候,第二個指標剛好走到了n的前乙個位置

while

(fnode != null)

//刪除n位置的節點

snode.next = snode.next.next;

//返回

return dummy.next;

}}

鍊錶 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和n 2.當刪除了倒數第二個節點後,鍊錶變為1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?definition for singly linked list....

鍊錶 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。思路 精髓!弄個啞節點,可以直接避免節點數只有乙個的情況。先都指向啞節點,fast先走n 1步。然...

鍊錶 刪除鍊錶的倒數第 N 個結點

記錄 於leetcode 在對鍊錶進行操作時,一種常用的技巧是新增乙個啞節點 dummy node 它的next 指標指向鍊錶的頭節點。這樣一來,我們就不需要對頭節點進行特殊的判斷了。例如,在本題中,如果我們要刪除節點 y,我們需要知道節點 y 的前驅節點 x,並將 x 的指標指向 y 的後繼節點。...