本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; };
时间: 2024-12-19 18:28:35 浏览: 0
C语言数据结构之双向循环链表的实例
5星 · 资源好评率100%
在C语言中,你可以通过创建结构体`ListNode`并定义两个函数来实现这个需求。首先,你需要实现链表的基本操作,如创建新节点、插入节点和获取下一个节点。
```c
// 定义链表节点结构体
struct ListNode {
int data;
struct ListNode* next;
};
// 函数1:创建一个新的链表并将数据存入第一个节点
struct ListNode* createList(int input[]) {
struct ListNode* head = NULL;
for (int i = 0; input[i] != -1; i++) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->data = input[i];
newNode->next = head;
head = newNode;
}
return head;
}
// 函数2:遍历链表,删除所有偶数节点
void deleteEvenNodes(struct ListNode** head) {
if (*head == NULL) {
return;
}
struct ListNode* current = *head;
struct ListNode* prev = NULL;
while (current != NULL) {
if (current->data % 2 == 0) {
// 删除偶数节点,prev接替current
if (prev != NULL) {
prev->next = current->next;
} else { // 如果当前节点是头节点,则更新头指针
*head = current->next;
}
free(current); // 释放已删除节点的内存
} else {
// 非偶数节点,继续向前移动
prev = current;
}
current = current->next;
}
}
```
在这个实现中,`createList`函数用于创建一个包含输入数组元素的新链表,而`deleteEvenNodes`函数则遍历整个链表,遇到偶数节点就将其从链表中移除。
阅读全文