📌  相关文章
📜  用于编写删除链表的函数的 C 程序(1)

📅  最后修改于: 2023-12-03 15:11:17.919000             🧑  作者: Mango

用于编写删除链表的函数的 C 程序

链表是一种常见的数据结构,在编写 C 程序时经常使用。它可以动态地添加、删除元素,非常适合存储数据量不确定的情况。删除链表中的元素也是经常使用的操作,下面介绍用 C 语言编写删除链表的函数。

代码实现

以下是一个示例代码,用于实现删除链表中某个节点的功能。该函数接收一个指向链表头结点的指针,以及要删除的节点的值。如果链表中包含该值的节点,则删除该节点并返回新的头结点,否则返回原始头结点。

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* deleteNode(struct ListNode* head, int val) {
    if (head == NULL) return NULL;
    if (head->val == val) {
        struct ListNode *temp = head->next;
        free(head);
        return temp;
    }
    struct ListNode *prev = head;
    struct ListNode *curr = head->next;
    while (curr != NULL) {
        if (curr->val == val) {
            prev->next = curr->next;
            free(curr);
            break;
        }
        prev = curr;
        curr = curr->next;
    }
    return head;
}
代码解释

首先定义了链表中每个节点的结构体,包括节点的值和指向下一个节点的指针。函数删除的是链表中指定值的节点,因此需要一个变量来存储值,以便和链表中的节点值进行比较。

在主函数中调用 deleteNode 函数时,需要传递链表的头结点和要删除的值。头结点是整个链表的入口,通过它可以访问到整个链表。要删除的值是函数的参数,用于和链表中的节点值进行比较。

首先判断头结点是否为空,如果是则直接返回空。然后判断头结点的值是否和要删除的值相等,如果是则将头结点指向的下一个节点作为新头结点,并释放原来的头结点。如果头结点不是要删除的节点,则需要遍历整个链表来查找要删除的节点。

定义两个指针 prev 和 curr,分别指向要删除节点的前一个节点和要删除的节点。从头结点的下一个节点开始遍历链表,如果当前节点的值等于要删除的值,则将前一个节点的 next 指针指向当前节点的下一个节点,并释放当前节点。最后返回原头结点。

总结

C 语言中实现删除链表的函数方式多种多样,需要根据实际情况进行选择。本文介绍了一种较为常见的实现方法,供程序员参考。对于初学者而言,在编写代码时需要结合实际情况思考,进行合理选择,编写出高质量的代码。