用c语言编写将一个链表中元素值为x的结点删除。(链表数据域为整数,初始长为6个元素) **输入提示信息:\"输入数组%d个元素的值。\ \" **输入格式:\"%d\" **输出提示:\"此链表各个结点的数据域为: **输出格式:\"%d\" **输入提示信息:\"输入要删除的数据x: **输入格式:\"%d\" **输出提示:\"删除后链表各个结点的数据域为: **输出格式:\"%d \" 程序运行示例1: 输入数组6个元素的值。 11 22 33 44 55 66 此链表各个结点的数据域为:112233445566 输入要删除的数据x:33 删除后链表各个结点的数据域为:1122 44 5566 程序运行示例2: 输入数组6个元素的值。 6 2 7 4 5 9 此链表各个结点的数据域为:627459. 输入要删除的数据x:8 删除后链表各个结点的数据域为:627459
时间: 2024-03-10 15:49:57 浏览: 109
以下是实现该功能的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 创建链表
ListNode* createLinkedList(int* nums, int size) {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
ListNode* cur = head;
for (int i = 0; i < size; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = nums[i];
node->next = NULL;
cur->next = node;
cur = cur->next;
}
return head->next;
}
// 删除链表中值为x的结点
ListNode* deleteNode(ListNode* head, int x) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->next = head;
ListNode* pre = dummy;
ListNode* cur = head;
while (cur) {
if (cur->val == x) {
pre->next = cur->next;
cur = cur->next;
} else {
pre = pre->next;
cur = cur->next;
}
}
return dummy->next;
}
// 打印链表
void printLinkedList(ListNode* head) {
while (head) {
printf("%d ", head->val);
head = head->next;
}
}
int main() {
printf("输入数组6个元素的值。\n");
int nums[6];
for (int i = 0; i < 6; i++) {
scanf("%d", &nums[i]);
}
ListNode* head = createLinkedList(nums, 6);
printf("此链表各个结点的数据域为:");
printLinkedList(head);
printf("\n输入要删除的数据x:");
int x;
scanf("%d", &x);
head = deleteNode(head, x);
printf("删除后链表各个结点的数据域为:");
printLinkedList(head);
return 0;
}
```
程序运行示例1:
```
输入数组6个元素的值。
11
22
33
44
55
66
此链表各个结点的数据域为:11 22 33 44 55 66
输入要删除的数据x:33
删除后链表各个结点的数据域为:11 22 44 55 66
```
程序运行示例2:
```
输入数组6个元素的值。
6
2
7
4
5
9
此链表各个结点的数据域为:6 2 7 4 5 9
输入要删除的数据x:8
删除后链表各个结点的数据域为:6 2 7 4 5 9
```
阅读全文