在O(1)时间删除链表结点

来源:互联网 发布:诺基亚3310软件下载 编辑:程序博客网 时间:2024/05/19 23:16

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。

思路
找到要删除的结点i 的下一个结点j ,把后面的结点j 的内容复制到要删除结点i,i->next = j->next, delete j;
注意: 

删除尾结点时,只能从头到尾遍历链表再进行删除。

 只有一个节点,删除头结点。(不要忘记删除把头结点设置成NULL)

struct Node{int _value;Node* _next;};void DeleteNode(Node* pHead, Node* del){if (pHead == NULL || del == NULL)return;if (del->_next == NULL)//删除为节点,只能用遍历方式删除{Node* cur = pHead;while (cur->_next != del){cur = cur->_next;}cur->_next = NULL;delete del;del = NULL;}else if (del == pHead)//只有一个节点,删除头结点{delete del;del = NULL;pHead = del = NULL;}else//多个节点,删除其中一个{Node* next = del->_next;del->_value = next->_value;//把后面的结点复制到要被删除的结点del->_next = next->_next;delete next;next = NULL;}}


0 0
原创粉丝点击