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

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

用于删除给定位置的链表节点的 C 程序
程序介绍

该 C 程序用于删除指定位置的链表节点。链表是一种常用的数据结构,它可以动态地加入或者删除节点,因此十分适合于需要频繁进行增删操作的场景。这个程序可以帮助程序员在实际工作中快速删除链表中的任意节点。

程序思路

该程序的主要思路是,先找到被删除节点的前一个节点,然后将它的 next 指针指向被删除节点的下一个节点,最后释放被删除节点的内存。

程序代码
#include <stdio.h>
#include <stdlib.h>

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

void deleteNode(struct ListNode *head, int position) {
    struct ListNode *prev = head;
    struct ListNode *cur = head->next;
    
    // 如果要删除的是头结点
    if (position == 0) {
        head = head->next;
        free(prev);
        return;
    }
    
    // 找到被删除节点的前一个节点
    for (int i = 0; i < position - 1; i++) {
        prev = cur;
        cur = cur->next;
    }

    // 将前一个节点的 next 指针指向被删除节点的下一个节点
    prev->next = cur->next;
    
    // 释放被删除节点的内存
    free(cur);
}

int main() {
    // 创建链表
    struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *node1 = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *node2 = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *node3 = (struct ListNode *)malloc(sizeof(struct ListNode));

    head->val = 0;
    node1->val = 1;
    node2->val = 2;
    node3->val = 3;

    head->next = node1;
    node1->next = node2;
    node2->next = node3;
    node3->next = NULL;

    // 删除第三个节点
    deleteNode(head, 2);

    // 打印链表
    struct ListNode *cur = head;
    while (cur != NULL) {
        printf("%d ", cur->val);
        cur = cur->next;
    }

    return 0;
}
程序输出
0 1 3
总结

该 C 程序可以帮助程序员删除链表中指定位置的节点。需要注意的是,当要删除的节点是头结点时,需要特殊处理。除此以外,这个程序适用于任何长度的链表和任何位置的删除操作。