![](https://csdnimg.cn/release/download_crawler_static/86303867/bg5.jpg)
删除
要删除节点p,必须找到节点p的前驱节点。
删除节点p的后继节点
删除指定位置节点
由于该单向链表没有尾节点,删除最后一个节点时需要专门处理
完整代码
int deleteNodeAfter(Node* p) { //删除指定节点的后继节点,并返回删除节点的值
if (p->next == NULL) return -1;
Node* temp = p->next;
int ret = temp->data;
p->next = temp->next;
delete temp; //free(temp);
return ret;
}
1
2
3
4
5
6
7
8
int deleteNode(LinkList* L, Node* t) {
Node* p;
for (p = L->head; p != NULL; p = p->next) { //找到节点t的前驱节点p
if (p->next == t) break;
}
//return deleteNodeAfter(p);
int ret = t->data;
p->next = t->next;
delete t; //free(t);
return ret;
}
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
struct Node {
int data;
Node* next;
//构造函数
1
2
3
4
5
6
7