编写C语言程序,在单链表L中删除所有能被3整除的数
时间: 2023-11-14 13:06:49 浏览: 86
C语言数据结构 单链表的删除算法
5星 · 资源好评率100%
好的,我可以帮你解决这个问题。以下是删除单链表中能被3整除的数的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点的结构体
struct ListNode {
int val;
struct ListNode* next;
};
// 删除能被3整除的数
struct ListNode* removeMultiplesOfThree(struct ListNode* head) {
struct ListNode* p = head;
struct ListNode* prev = NULL;
while (p != NULL) {
if ((p->val) % 3 == 0) { // 能被3整除
if (prev == NULL) { // 如果是头结点
head = head->next;
free(p);
p = head;
} else { // 如果不是头结点
prev->next = p->next;
free(p);
p = prev->next;
}
} else { // 不能被3整除
prev = p;
p = p->next;
}
}
return head;
}
int main() {
// 创建单链表
int arr[] = {1, 3, 5, 7, 8, 9, 10, 12};
int n = sizeof(arr) / sizeof(int);
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = arr[0];
head->next = NULL;
struct ListNode* p = head;
for (int i = 1; i < n; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = arr[i];
node->next = NULL;
p->next = node;
p = node;
}
// 删除能被3整除的数
head = removeMultiplesOfThree(head);
// 输出单链表
printf("The result is: ");
p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
在该程序中,我们创建了一个单链表,然后调用 removeMultiplesOfThree 函数来删除链表中能被3整除的数。我们使用一个 while 循环遍历链表,当遍历到能被3整除的数时,我们将其删除。最后,我们输出删除后的链表。
希望这个程序能帮到你!
阅读全文