✏️ 纠错
第 244 题 / 共 251 题
3、在单链表中,已知指针p指向要删除的结点(非尾结点),想在O(1)删除p,可行做法是用p->next覆盖p的值与next,然后删除p->next。
你真棒!
📝 题目解析
【答案】√
【考纲知识点】单链表
【解析】在单链表中,如果我们要删除的节点p已知,但它不是尾节点时,传统做法需要找到它的前驱节点才能修改指针,这通常要从链表头遍历,时间复杂度是O(n)。
但是这里有一个“巧妙”的O(1)方法:
首先,把p的下一个节点p->next的数据 和 p->next的指向 复制到p。
这样p看起来就变成了它的下一个节点(数据和next都相同)。
然后释放原本的p->next节点,相当于直接跳过该节点。
本质上,这种方法不是直接删除p,而是用p->next覆盖p,然后删除原来的下一个节点,从整体链表来看,原本位置的节点被移除,且无需从头查找前驱,因此可以O(1)完成。