设有一个带头结点的单循环链表,请设计算法从这个链表中删除值为x的结点。若链表中没有值为x的结点,则打印“没有找到该结点”
时间: 2023-05-30 10:02:48 浏览: 121
3-2 试编写一个算法,在带表头结点的单链表中寻找第i个结点.doc
算法思路:
- 首先遍历链表,找到值为x的结点。
- 如果找到了,就删除该结点。
- 如果没有找到,就打印“没有找到该结点”。
需要注意的是,单循环链表需要特殊处理头结点和尾结点的情况。
算法实现:
```
void deleteNode(Node* head, int x) {
Node* p = head->next; // 从第一个结点开始遍历
Node* prev = head; // 记录p的前驱结点
while (p != head) { // 遍历整个链表
if (p->data == x) { // 找到了值为x的结点
prev->next = p->next; // 将p从链表中删除
delete p; // 释放p所占用的内存空间
return;
}
prev = p;
p = p->next;
}
cout << "没有找到该结点" << endl;
}
```
完整代码如下:
阅读全文