题目内容:用C语言 建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。 输入格式: 第一行为链表长度n; 第二行为链表中的n个数据元素的值; 第三行为需要删除的元素值。 输出格式: 输出为删除后的链表中的所有数据元素的值。 输入样例: 4 45 12 34 8 34 输出样例: 45 12 8
时间: 2024-03-09 19:51:15 浏览: 59
C语言数据结构 单链表的删除算法
5星 · 资源好评率100%
以下是该题的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
// 初始化链表
void initList(LinkedList *L) {
*L = (LinkedList) malloc(sizeof(Node));
(*L)->next = NULL;
}
// 在链表末尾插入节点
void insertTail(LinkedList L, int x) {
Node *p = L;
while (p->next != NULL) {
p = p->next;
}
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->data = x;
newNode->next = NULL;
p->next = newNode;
}
// 删除链表中值为x的节点
void deleteNode(LinkedList L, int x) {
Node *p = L->next;
Node *pre = L;
while (p != NULL) {
if (p->data == x) {
pre->next = p->next;
free(p);
p = pre->next;
} else {
pre = p;
p = p->next;
}
}
}
// 打印链表
void printList(LinkedList L) {
Node *p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
int main() {
LinkedList L;
initList(&L);
int n, x, del;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
insertTail(L, x);
}
scanf("%d", &del);
deleteNode(L, del);
printList(L);
return 0;
}
```
阅读全文