c语言建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。
时间: 2023-10-24 15:08:38 浏览: 87
2的n次方 单链表操作 c语言
4星 · 用户满意度95%
以下是删除单链表中值为给定值的元素的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 删除单链表中所有值为给定值的元素
struct ListNode* removeElements(struct ListNode* head, int val) {
// 当链表头节点的值等于给定值时,需要删除头节点
while (head != NULL && head->val == val) {
struct ListNode *temp = head;
head = head->next;
free(temp);
}
// 遍历链表,删除值为给定值的节点
if (head != NULL) {
struct ListNode *cur = head;
while (cur->next != NULL) {
if (cur->next->val == val) {
struct ListNode *temp = cur->next;
cur->next = cur->next->next;
free(temp);
} else {
cur = cur->next;
}
}
}
return head;
}
// 创建单链表
struct ListNode* createList(int n) {
if (n <= 0) {
return NULL;
}
struct ListNode *head, *tail;
head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));
printf("请输入链表各个节点的值:");
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
tail->next = node;
tail = node;
}
return head->next;
}
// 打印单链表
void printList(struct ListNode *head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int n, val;
printf("请输入单链表的长度:");
scanf("%d", &n);
struct ListNode *head = createList(n);
printf("请输入要删除的元素值:");
scanf("%d", &val);
head = removeElements(head, val);
printf("删除后的单链表为:");
printList(head);
return 0;
}
```
使用方法:
1. 编译运行上面的代码;
2. 输入单链表的长度和各个节点的值,以及要删除的元素值;
3. 程序会输出删除指定元素后的单链表。
阅读全文