首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用索引和列表作为参数从C中的链表中删除一项?

在C语言中,可以使用索引和列表作为参数从链表中删除一项。下面是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
struct Node {
    int data;
    struct Node* next;
};

// 在链表末尾插入新节点
void insert(struct Node** head, int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;

    if (*head == NULL) {
        *head = newNode;
    } else {
        struct Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

// 从链表中删除指定索引位置的节点
void deleteAtIndex(struct Node** head, int index) {
    if (*head == NULL) {
        printf("链表为空,无法删除节点。\n");
        return;
    }

    struct Node* temp = *head;

    // 如果要删除的是头节点
    if (index == 0) {
        *head = temp->next;
        free(temp);
        return;
    }

    // 找到要删除节点的前一个节点
    for (int i = 0; temp != NULL && i < index - 1; i++) {
        temp = temp->next;
    }

    // 如果索引超出链表长度
    if (temp == NULL || temp->next == NULL) {
        printf("索引超出链表长度,无法删除节点。\n");
        return;
    }

    // 将要删除节点的下一个节点连接到前一个节点
    struct Node* nextNode = temp->next->next;
    free(temp->next);
    temp->next = nextNode;
}

// 打印链表
void printList(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    struct Node* head = NULL;

    // 插入节点
    insert(&head, 1);
    insert(&head, 2);
    insert(&head, 3);
    insert(&head, 4);
    insert(&head, 5);

    printf("链表:");
    printList(head);

    // 删除索引为2的节点
    deleteAtIndex(&head, 2);

    printf("删除索引为2的节点后的链表:");
    printList(head);

    return 0;
}

这段代码中,我们定义了一个链表节点结构Node,包含一个整型数据data和一个指向下一个节点的指针next。然后,我们实现了insert函数用于在链表末尾插入新节点,deleteAtIndex函数用于删除指定索引位置的节点,printList函数用于打印链表。

deleteAtIndex函数中,我们首先处理了链表为空的情况。然后,我们判断要删除的节点是否是头节点,如果是,则将头指针指向下一个节点,并释放原头节点的内存。如果要删除的节点不是头节点,我们使用一个循环找到要删除节点的前一个节点。最后,我们将要删除节点的下一个节点连接到前一个节点,并释放要删除节点的内存。

main函数中,我们创建了一个空链表,并插入了一些节点。然后,我们打印链表,删除索引为2的节点,并再次打印链表。

这是一个简单的链表删除节点的示例,可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分27秒

083.slices库删除元素Delete

6分33秒

048.go的空接口

4分26秒

068.go切片删除元素

1时5分

APP和小程序实战开发 | 基础开发和引擎模块特性

6分6秒

普通人如何理解递归算法

1分10秒

PS小白教程:如何在Photoshop中制作透明玻璃效果?

2时1分

平台月活4亿,用户总量超10亿:多个爆款小游戏背后的技术本质是什么?

14分30秒

Percona pt-archiver重构版--大表数据归档工具

2分7秒

基于深度强化学习的机械臂位置感知抓取任务

1分30秒

基于强化学习协助机器人系统在多个操纵器之间负载均衡。

1时5分

云拨测多方位主动式业务监控实战

领券