在O(1)時間復雜度刪除鏈表節點


1.問題描述:給定一個單鏈表中的一個等待被刪除的節點(非表頭或表尾)。請在O(1)時間復雜度刪除該鏈表節點。

2.思路:例如給定1->2->3->4和節點3,刪除后鏈表為1->2->3。

             應該使待刪除節點的指針域所指向的數據域賦值給該節點的數據域,一定要記得把刪除節點的指針域指向它的下一個節點的指針域。

3.代碼:

/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param node: a node in the list should be deleted
* @return: nothing
*/
void deleteNode(ListNode *node) {
// write your code here
node->val = node->next->val;
node->next=node->next->next;
}
};

4.感想:一開始覺得這個題目很簡單,我就只是把待刪除節點的下一個節點的數據域賦值給了當前節點的數據域,這樣一直是給定1->2->3->4和節點3,刪除后為1->2->4->4.

因為,雖然待刪除節點已經被刪除,它的下一個節點數據賦值給了刪除后節點的數據域,但是下一個節點還是存在的,因此一定要記得把它的指針域指向下一個節點的指針域。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com