题目
给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在O(1)时间内删除该结点。
思路
- 既然一个节点已经给定,那么可以从头结点开始遍历,遍历到给定节点p的前一个节点,然后执行删除操作即可,但是这种方法的时间复杂度为O(n)不符合条件;
- 我们已知节点指针p,也可以知道下一个节点的指针p->next,那么如果我们将下一个指针值赋给该指针,同时删除下一个指针,这样就可以达到题目要求:
方法一的核心代码:
q = head->next;
while(q->next != p)
q = q->next;
q->next = p->next;
delete p
方法二的核心代码:
p->data = p->next->data;
p->next = p->next->next;