掌握C语言,带头节点让你轻松应对复杂链表操作

作者:用户PHSY 更新时间:2025-05-29 09:28:39 阅读时间: 2分钟

引言

链表是C语言中一种常用的数据结构,它通过节点之间的指针连接形成线性序列。在链表操作中,带头节点的设计能够简化许多操作,使得代码更加清晰和易于维护。本文将详细介绍C语言中带头节点单链表的操作,帮助读者轻松应对复杂链表操作。

带头节点单链表的定义

首先,我们需要定义链表的节点结构。带头节点的链表在链表的开始处有一个额外的节点,它的数据部分通常不存储实际元素,而是用于方便操作。

typedef struct Node {
    int data; // 数据域
    struct Node* next; // 指针域,指向下一个节点
} Node;

接下来,定义链表结构体,包含一个指向头节点的指针。

typedef struct LinkedList {
    Node* head; // 头结点
} LinkedList;

创建链表

创建一个空链表就是初始化一个头结点,其next指针为NULL

LinkedList* createLinkedList() {
    LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
    list->head = NULL;
    return list;
}

插入节点

插入节点分为在链表头部插入和在特定位置插入。

在头部插入节点

void insertAtStart(LinkedList* list, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = list->head;
    list->head = newNode;
}

在特定位置插入节点

void insertAfter(Node prevNode, int value) {
    if (prevNode == NULL) return;
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = prevNode->next;
    prevNode->next = newNode;
}

删除节点

删除节点分为删除指定节点、删除指定值的节点和按序删除第i个节点。

删除指定节点

void deleteNode(Node* node) {
    if (node == NULL) return;
    Node* temp = node->next;
    free(node);
    node = temp;
}

删除指定值的节点

void deleteValue(LinkedList* list, int value) {
    Node* current = list->head;
    Node* prev = NULL;
    while (current != NULL && current->data != value) {
        prev = current;
        current = current->next;
    }
    if (current == NULL) return;
    if (prev == NULL) {
        list->head = current->next;
    } else {
        prev->next = current->next;
    }
    free(current);
}

按序删除第i个节点

void deleteAt(LinkedList* list, int i) {
    if (i <= 0 || list->head == NULL) return;
    Node* current = list->head;
    Node* prev = NULL;
    int count = 1;
    while (current != NULL && count != i) {
        prev = current;
        current = current->next;
        count++;
    }
    if (current == NULL) return;
    if (prev == NULL) {
        list->head = current->next;
    } else {
        prev->next = current->next;
    }
    free(current);
}

打印链表

void printList(LinkedList* list) {
    Node* current = list->head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

总结

通过以上介绍,相信读者已经掌握了C语言中带头节点单链表的操作。在实际应用中,合理运用这些操作可以简化链表操作,提高代码的可读性和可维护性。

大家都在看
发布时间:2024-12-14 04:34
据市交委介绍,当前高铁通道不足,仍是我市交通发展短板中的短板。在实施全市交通基础设施建设提升战略行动期间,高速铁路建设将突出“加快”,即建设进度加快,运行速度加快。“以全线时速350公里的标准,提速构建‘米’字形高铁网。”市交委有关负责人表。
发布时间:2024-10-30 09:23
锻炼身体达到了一定的运动强度和时间,是可以减肥的。锻炼的方法有很多种。很多人会选择慢跑、跳绳、打球这样的方式减肥。还有的人会在健身房接受正规的指导,进行有计。
发布时间:2024-10-30 20:54
乳房是人类的生命之源,但也是人体比较脆弱的部位,常见的乳腺疾病有乳腺增生,乳腺纤维瘤等。而且在未婚女性身上发病率同样很高。现在乳腺癌患者也越来越多了,之所以。
发布时间:2024-12-11 04:55
the train is( bound) for~~~~这列车是开往双龙Please keep (clear of the door) 不要靠,挨车门,反正就是开门要注意什么的我也住在双龙这边~。
发布时间:2024-12-11 03:32
机场线由地抄铁贰号线袭一期起点金银潭站北端引出,上跨出入段线后至常青花园车辆段设站,之后转向金银潭大道,至宏图大道转向北,在武汉客厅处设站,与三号线平行换乘,与吧号线通道换乘;之后沿盘龙大道继续向北,至巨龙大道折向西,在机场南端引入机场,。
发布时间:2024-10-31 14:56
1、当背叛的真相已不再是你的秘密,当我们之间的承诺已成为过往,只愿分手不算太迟,让我明白放手才有未来,就让我们各自拥有新的故事。 2、世上最凄绝的距离是两个人本来距离很远,互不相识。忽然有一天,他们相识,相爱,距离变得很近。然后有一天。
发布时间:2024-12-11 04:46
大连地铁运营线路共有条大连地铁(Dalian Metro)是指服务于中国辽宁省大连市的城市轨道交通,其第一条线路大连地铁3号线于2003年5月1日正式开通运营,使大连成为辽宁省首个开通地铁的城市。截至2018年9月,大连地铁运营线路共有4条。
发布时间:2024-11-19 06:03
在日常生活中,称重计算是一项基本技能,无论是在买卖商品还是烹饪时,我们都会用到它。那么,究竟该如何进行称重计算呢?首先,我们需要明确称重的目的是什么。称重计算主要分为两种情况:一种是测量物体的质量,另一种是按照比例调配物质。不论是哪种情况。
发布时间:2024-11-11 12:01
首先,将塑料桶的提手握在其中一侧,另一只手同时挤压提手的另一边,使整个占据面积迅速向内收缩,搜索纸桶的两侧孔洞后对准同时松手,骑手就会自动恢复弹力,卡住两侧的孔洞上,这样就重新安装在桶上了塑料桶提手怎么安装在桶上是用凹凸的卡扣安装上的。。
发布时间:2024-12-12 02:42
公交线路:地铁9号线,全程约3.5公里1、从浦东新区市民中心步行约770米,到达杨高中路站2、乘坐地铁9号线,经过1站, 到达世纪大道站3、步行约510米,到达九六广场。