用c++写一段完整的代码,要求实现单向链表删除节点,不要出现语法错误
时间: 2023-06-01 21:02:10 浏览: 47
以下是一个基于C语言实现单向链表删除节点的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 定义链表头指针
Node *head = NULL;
// 创建链表
void createList() {
int n, i, num;
Node *p;
printf("请输入链表的节点个数:");
scanf("%d", &n);
// 创建链表头节点
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
p = head;
for (i = 1; i <= n; i++) {
printf("请输入第%d个节点的值:", i);
scanf("%d", &num);
// 创建新的节点并添加到链表中
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
p->next = newNode;
p = newNode;
}
}
// 遍历链表
void traverseList() {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 删除节点
void deleteNode(int num) {
Node *p = head->next;
Node *pre = head;
// 遍历链表,查找待删除节点的位置
while (p != NULL) {
if (p->data == num) {
break;
}
pre = p;
p = p->next;
}
// 如果找到了待删除节点,则将该节点从链表中删除
if (p != NULL) {
pre->next = p->next;
free(p);
}
}
int main() {
createList();
printf("原始链表:");
traverseList();
int num;
printf("请输入要删除的节点的值:");
scanf("%d", &num);
deleteNode(num);
printf("删除节点后的链表:");
traverseList();
return 0;
}
```
在上述代码中,我们使用了 `typedef` 定义了一个 `Node` 结构体,它包括两个成员变量:`data` 和 `next`,分别表示节点的数据和指向下一个节点的指针。同时,我们还定义了一个全局的链表头指针 `head`,它指向链表的头节点。
在 `createList()` 函数中,我们首先从用户输入中获取链表的节点个数,然后创建链表头节点,接着遍历用户输入的节点值,创建新的节点并将其添加到链表的末尾。
在 `traverseList()` 函数中,我们遍历链表,输出每个节点的数据值。
在 `deleteNode()` 函数中,我们传入一个整数 `num`,它表示要删除的节点的值。我们遍历链表,查找待删除节点的位置,然后将其从链表中删除。
最后,在 `main()` 函数中,我们先创建链表,然后输出原始链表,接着要求用户输入要删除的节点的值,然后调用 `deleteNode()` 函数删除该节点,并输出删除节点后的链表。