📅  最后修改于: 2023-12-03 14:56:19.336000             🧑  作者: Mango
本文介绍了一个用于从链接列表中删除最后一次出现的项目的 C 程序。下面将逐步解释这个程序的功能和实现方法。
这个程序的主要功能是从一个链接列表中删除最后一次出现的项目。它接受一个链接列表和一个要删除的项目作为输入,并返回删除后的新列表。
下面将以 C 语言为例,编写一个函数来实现这个功能:
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node* deleteLast(Node *head, int target) {
// 处理空列表的情况
if (head == NULL) {
return head;
}
// 处理只有一个节点的情况
if (head->next == NULL) {
if (head->data == target) {
free(head);
head = NULL;
}
return head;
}
// 其他情况下遍历链表,找到最后一次出现的目标值并删除
Node *prev = NULL;
Node *curr = head;
Node *to_delete = NULL;
while (curr->next != NULL) {
if (curr->data == target && curr->next->data != target) {
to_delete = curr;
}
prev = curr;
curr = curr->next;
}
// 删除节点
if (to_delete == NULL) {
if (head->data == target) {
to_delete = head;
head = head->next;
}
} else {
prev->next = to_delete->next;
}
free(to_delete);
return head;
}
该函数接受一个头指针 head
和要删除的项目值 target
。它会遍历链表,找到最后一次出现的目标值 target
并删除该节点。如果链表为空或目标值不存在,则直接返回空的链表头指针。
int main() {
// 创建链表
Node *head = (Node*) malloc(sizeof(Node));
head->data = 1;
Node *node2 = (Node*) malloc(sizeof(Node));
node2->data = 2;
head->next = node2;
Node *node3 = (Node*) malloc(sizeof(Node));
node3->data = 3;
node2->next = node3;
node3->next = NULL;
// 调用函数删除最后一次出现的节点
int target = 2;
head = deleteLast(head, target);
// 打印删除后的链表
Node *curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
return 0;
}
输出结果为: 1 3
,表示成功删除了最后一次出现的项目值为 2 的节点。
以上就是用于从链接列表中删除最后一次出现的项目的 C 程序。可以根据实际项目的需求修改和扩展该程序。