容易 刪除鍊錶中倒數第n個節點

2021-07-05 22:42:45 字數 1458 閱讀 4178

容易刪除鍊錶中倒數第n個節點 28

%通過

給定乙個鍊錶,刪除鍊錶中倒數第n個節點,返回鍊錶的頭節點。

您在真實的面試中是否遇到過這個題?

yes

樣例 給出鍊錶1->2->3->4->5->null

和 n = 2.

刪除倒數第二個節點之後,這個鍊錶將變成1->2->3->5->null.

注意鍊錶中的節點個數大於等於n

挑戰o(n)時間複雜度

標籤expand 

兩根指標鍊錶

note:

given n will always be valid.

try to do this in one pass.

這裡的note的意思應該就是可以不做特殊處理n值了。不過其實特殊處理也就一句語句。

思路:快指標和慢指標的概念,先乙個指標先走,到了離起點n個節點遠的時候,慢指標走,等到快指標走到結尾,那麼慢指標走到了需要刪除的位置了。

初學者注意:保留慢指標的前置指標,這樣才能刪除。

注意:特殊處理需要刪除頭指標的情況,如輸入1->2->3->4; n=4,那麼需要刪除1,這就需要特殊處理了,頭指標往前一步就可以了。

[cpp]view plain

copy

print

?structlistnode   

};  

classsolution   

if(i != n) 

returnhead;  

finddeletepos(head, head, head, end);  

returnhead;  

}voidfinddeletepos(listnode *(&head), listnode *pre, listnode *cur, listnode *end)  

//注意:刪除頭指標的時候要做特殊處理

if(pre == cur)  

pre->next = cur->next;  

}  };  

//2015-00-25 update

[cpp]view plain

copy

print

?listnode *removenthfromend(listnode *head, 

intn)  

pre->next = pre->next->next;  

returndummy.next;  

}  

刪除鍊錶中倒數第n個節點

刪除鍊錶中倒數第n個節點 給定乙個鍊錶,刪除鍊錶中倒數第n個節點,返回鍊錶的頭節點。樣例 給出鍊錶1 2 3 4 5 null 和 n 2.刪除倒數第二個節點之後,這個鍊錶將變成1 2 3 5 null.definition for listnode.public class listnode pu...

刪除鍊錶中倒數第n個節點

給定乙個鍊錶,刪除鍊錶中倒數第n個節點,返回鍊錶的頭節點。注意事項 鍊錶中的節點個數大於等於n 樣例 給出鍊錶1 2 3 4 5 null和 n 2.刪除倒數第二個節點之後,這個鍊錶將變成1 2 3 5 null.定義兩個指標,slow fast fast先先前走n步後 slow和fast一起走,直...

刪除鍊錶中倒數第n個節點

給定乙個鍊錶,刪除鍊錶中倒數第n個節點,返回鍊錶的頭節點。注意事項 鍊錶中的節點個數大於等於n 樣例 給出鍊錶1 2 3 4 5 null和 n 2.刪除倒數第二個節點之後,這個鍊錶將變成1 2 3 5 null.挑戰 o n 時間複雜度 如果先遍歷鍊錶,得出鍊錶結點個數,然後再第二次遍歷找出倒數第...