C 语言实现:重复操作链表,删除最后匹配元素及注意事项
以下是使用 C 语言实现的代码: ```c #include <stdio.h> #include <stdlib.h> // 链表节点结构体 typedef struct Node { int data; struct Node *next; } Node; // 创建新节点 Node* createNode(int value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->next = NULL; return newNode; } // 在链表末尾添加节点 void appendNode(Node head, int value) { Node* newNode = createNode(value); if (*head == NULL) { *head = newNode; } else { Node* current = *head; while (current->next!= NULL) { current = current->next; } current->next = newNode; } } // 删除最后一个与指定值相等的节点 void deleteLastMatch(Node head, int x) { Node* current = *head; Node* prev = NULL; Node* toDelete = NULL; int found = 0; while (current!= NULL) { if (current->data == x) { found = 1; toDelete = current; prev = current; } current = current->next; } if (found && toDelete!= *head) { prev->next = toDelete->next; free(toDelete); } else if (found && toDelete == *head) { *head = (*head)->next; free(toDelete); } } // 打印链表 void printList(Node* head) { Node* current = head; while (current!= NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); } // 释放链表内存 void freeList(Node* head) { Node* current = head; Node* temp; while (current!= NULL) { temp = current; current = current->next; free(temp); } } int main() { int repeat; printf("请输入重复次数(0<repeat<10):"); scanf("%d", &repeat); for (int i = 0; i < repeat; i++) { int n, x; Node* head = NULL; printf("请输入整数个数 n(0<n<=9):"); scanf("%d", &n); printf("请输入 %d 个整数:", n); for (int j = 0; j < n; j++) { int num; scanf("%d", &num); appendNode(&head, num); } printf("请输入要删除的整数 x:"); scanf("%d", &x); deleteLastMatch(&head, x); printf("修改后的链表:"); printList(head); freeList(head); } return 0; } ``` 额外需要注意的逻辑点: 1. 在处理链表操作时,要注意内存的分配和释放,避免内存泄漏。 2. 输入数据的合法性检查可以更加完善,比如对于输入的整数范围进行更严格的判断。 3. 对于删除操作,如果链表为空或者没有匹配的元素,需要考虑相应的处理方式。 ######[AI写代码神器 | 801点数解答 | 2025-03-20 20:46:04]
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)98
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)104
- Linux 系统用户、组及文件操作全流程实践(字节豆包 | 1142点数解答 | 2026-03-20 17:29:38)36
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- jQuery 实现动态操作 DOM:打造可增删任务的待办事项列表应用(百度文心 | 1015点数解答 | 2024-10-26 23:41:22)447
- jQuery 打造实用待办事项列表:输入添加、点击删除一步到位!(阿里通义 | 1139点数解答 | 2024-10-29 08:44:48)362
- jQuery 实现动态操作 DOM:打造带添加与删除功能的待办事项列表应用(阿里通义 | 687点数解答 | 2024-10-29 09:25:06)376
- 基于商品效期规则的本地网页管理系统,无需服务器和网络,单HTML文件本地浏览器运行。 商品效期规则: 保质期≥12个月:临期提醒提前45天,下架提前5天(含过期提醒) 6个月≤保质期<12个月:临期提醒提前20天,下架提前3天(含过期提醒) 3个月≤保质期<6个月:临期提醒提前15天,下架提前3天(含过期提醒) 30天≤保质期<3个月:临期提醒提前10天,下架提前3天(含过期提醒) 15天≤保质期<30天:临期提醒提前5天,下架提前3天(含过期提醒) 保质期≤15天:临期提醒提前3天,下架提前2天(含过期提醒) 一定要遵守上门这个规则,状态以上位置,需要一一对应。 严格遵循 6 级保质期规则 → 自动计算「临期/下架/过期」状态(绿/黄/红) 产品管理模块: 商品列表展示:序号、名称、类别、生产日期、保质期、到期日、剩余天数(带单位)、状态(正常/临期/下架(一定要注意,选择类型要根据选择显示),对应绿/黄/红颜色)、操作(编辑、删除、备注),默认按照后添加先排,还需要根据一些条件,比如剩余天数可以筛选排序。 功能:添加商品(弹窗形式,保质期仅支持"XX天"或"XX月"格式)(讯飞星火 | 2053点数解答 | 2026-04-01 23:04:48)27
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)274
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)268
- Python正则表达式:精准匹配字符串“abcablc”中的第二个“a”(字节豆包 | 554点数解答 | 2025-06-12 15:25:28)132
- C++实现最短编辑距离计算:将一个单词转换为另一个的最少操作数揭秘(字节豆包 | 311点数解答 | 2025-11-12 14:55:49)64