问答题 如何在不知道头指针的情况下将结点删除
【正确答案】
【答案解析】在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少?
下面讨论3种链表的情况:
1)单链表。如果p指向的结点为链表尾结点,则无法删除,否则,可以将p指向结点的数据与p的后继结点交换,然后删除p的后继结点。
2)双链表。由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。其时间复杂度为O(1)。
3)单循环链表。根据已知结点位置,可以直接得到其后相邻的结点位置(直接后继),又因为是循环链表,所以可以通过查找得到p结点的直接前趋。因此,可以删去p所指的结点。其时间复杂度应为O(n)。