使用C语言删除单链表指定元素(10分) 题目内容: 建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。 输入格式: 第一行为链表长度n; 第二行为链表中的n个数据元素的值; 第三行为需要删除的元素值。 输出格式: 输出为删除后的链表中的所有数据元素的值。 输入样例: 4 45 12 34 8 34 输出样例: 45 12 8
时间: 2023-06-19 19:03:48 浏览: 191
C语言数据结构 单链表的删除算法
5星 · 资源好评率100%
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* createList(int n) {
ListNode* head = NULL;
ListNode* tail = NULL;
ListNode* p = NULL;
for (int i = 0; i < n; i++) {
p = (ListNode*)malloc(sizeof(ListNode));
scanf("%d", &(p->val));
p->next = NULL;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
return head;
}
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->val = 0;
dummy->next = head;
ListNode* p = dummy;
while (p->next) {
if (p->next->val == val) {
ListNode* tmp = p->next;
p->next = tmp->next;
free(tmp);
} else {
p = p->next;
}
}
head = dummy->next;
free(dummy);
return head;
}
void printList(ListNode* head) {
while (head) {
printf("%d ", head->val);
head = head->next;
}
}
int main() {
int n, val;
scanf("%d", &n);
ListNode* head = createList(n);
scanf("%d", &val);
head = removeElements(head, val);
printList(head);
return 0;
}
```
阅读全文