📌  相关文章
📜  用于从链接列表中删除最后一次出现的项目的 C 程序(1)

📅  最后修改于: 2023-12-03 14:56:19.336000             🧑  作者: Mango

用于从链接列表中删除最后一次出现的项目的 C 程序

本文介绍了一个用于从链接列表中删除最后一次出现的项目的 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 程序。可以根据实际项目的需求修改和扩展该程序。