删除循环链表中结点s的前驱结点
时间: 2023-05-29 20:03:17 浏览: 310
对给定的链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。删除结点.cpp
由于循环链表中每个结点都有前驱结点,因此删除结点s的前驱结点需要考虑两种情况。
情况一:当s是链表的第一个结点时,需要删除的是链表的最后一个结点,即链表中的尾结点。此时,需要先找到链表的尾结点,然后将其指向s的后继结点,即可完成删除操作。
情况二:当s不是链表的第一个结点时,只需将s的前驱结点的指针指向s的后继结点即可完成删除操作。
具体实现代码如下:
```
if(s == head) { //情况一
ListNode *tail = head;
while(tail->next != head) {
tail = tail->next;
}
tail->next = s->next;
} else { //情况二
ListNode *pre = head, *cur = head->next;
while(cur != s) {
pre = cur;
cur = cur->next;
}
pre->next = cur->next;
}
```
阅读全文