用C语言建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。
时间: 2023-10-25 13:06:34 浏览: 81
好的,这是一个简单的单链表删除元素的问题,以下是一种可能的解法:
首先,我们需要定义单链表节点的数据结构:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
接下来,我们可以先创建一个头节点,然后循环读入 n 个整数,创建单链表:
```c
int n;
scanf("%d", &n);
struct ListNode *head = malloc(sizeof(struct ListNode));
head->next = NULL;
struct ListNode *cur = head;
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
cur->next = malloc(sizeof(struct ListNode));
cur->next->val = val;
cur->next->next = NULL;
cur = cur->next;
}
```
现在,我们可以开始删除等于给定值的元素了。我们需要遍历单链表,找到等于给定值的节点,并删除它。具体实现可以使用两个指针,一个指针指向当前节点,另一个指针指向当前节点的前一个节点,这样可以方便我们删除当前节点。删除节点的操作可以使用 free() 函数。
```c
int val;
scanf("%d", &val);
struct ListNode *prev = head;
struct ListNode *cur = head->next;
while (cur != NULL) {
if (cur->val == val) {
prev->next = cur->next;
free(cur);
cur = prev->next;
} else {
prev = cur;
cur = cur->next;
}
}
```
最后,我们需要释放内存,将单链表节点从头节点开始一个一个删除:
```c
cur = head->next;
while (cur != NULL) {
struct ListNode *temp = cur;
cur = cur->next;
free(temp);
}
free(head);
```
完整代码如下: