容易刪除鍊錶中倒數第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
?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
?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 時間複雜度 如果先遍歷鍊錶,得出鍊錶結點個數,然後再第二次遍歷找出倒數第...