📌  相关文章
📜  用于删除链表中节点的 C 程序(1)

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

用于删除链表中节点的 C 程序

链表是计算机科学中常见的数据结构之一,它是由若干个节点组成,每个节点都包含一个指向下一个节点的指针。在链表中删除某个节点可以是将该节点从链表中移除,也可以是将该节点的数据清除,并将其指针指向下一个节点。下面我们来介绍一个用于删除链表中节点的 C 程序。

删除链表中节点的算法

链表的删除操作需要将该节点的前一个节点指向该节点的下一个节点,然后将该节点的指针置为空。具体来说,可以参考以下算法实现:

  1. 判断链表是否为空,若为空则直接退出;否则,遍历链表找到要删除的节点。
  2. 若要删除的节点为链表头节点,则更新链表头节点指向下一个节点的指针。
  3. 在遍历中找到要删除的节点的前一个节点,然后将该节点指向下一个节点的指针赋值给前一个节点的指针。
  4. 将要删除的节点的指针置为空。
  5. 释放要删除的节点的内存空间。
C程序实现

下面是一个用于删除链表中节点的 C 程序的代码示例:

#include<stdio.h>
#include<stdlib.h>

// 定义链表节点
struct ListNode {
    int val;
    struct ListNode *next;
};

// 删除链表节点
struct ListNode* deleteNode(struct ListNode* head, int val){
    // 链表为空直接返回
    if(head == NULL) {
        return head;
    }
    // 需要删除的是头节点
    if(head->val == val) {
        struct ListNode* temp = head->next;
        free(head);
        return temp;
    }
    struct ListNode* cur = head;
    while(cur->next) {
        if(cur->next->val == val) {
            struct ListNode* temp = cur->next;
            cur->next = cur->next->next;
            free(temp);
            break;
        }
        cur = cur->next;
    }
    return head;
}

// 测试代码
int main() {
    struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->val = 1;
    head->next = NULL;
    deleteNode(head, 1);
}

以上代码实现了一个简单的链表删除操作。在删除链表节点时,需要注意一些细节,比如链表为空,需要删除的节点是头节点等情况。另外,为避免内存泄漏,每次删除节点后应当及时释放节点内存空间。