以下是使用 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. 对于删除操作,如果链表为空或者没有匹配的元素,需要考虑相应的处理方式。 [2025-03-20 20:46:04 | AI写代码神器 | 801点数解答]