登录注册
论坛
版主
7201
11
《Hello算法》5、创建链表
《Hello算法》6、链表插入
《Hello算法》7、链表的节点删除
《Hello算法》8、链接表查找+MCU中验证
常见的链表类型包括三种:
如下图所示:
image.png (169.62 KB, 下载次数: 0)
下载附件 保存到相册
2025-2-4 12:33 上传
//创建双向链表的初始化函数 构造函数 测试 #include <stdio.h> #include <stdlib.h> #include <stdint.h> typedef struct ListNode { int val; //节点的值 struct ListNode *next; //指向下一个节点的指针 struct ListNode *prev; //指向前一个节点的指针 } ListNode; /* 构造函数 */ ListNode *newListNode(int val) { ListNode *node; node = (ListNode *) malloc(sizeof(ListNode)); if(node == NULL) { printf("申请内存失败\n"); return NULL; } node->val = val; node->next = NULL; node->prev = NULL; return node; } /* 链表节点的释放 */ void freeListNode(ListNode *node) { if(node == NULL) { return; } free(node); } /* 链表节点的打印 */ void printListNode(ListNode *ListNode) { if(ListNode == NULL) { printf("链表为空\n"); return; } printf("%d \n", ListNode->val); } //打印所有节点 void printAllListNode(ListNode *head) { ListNode *p = head; while(p != NULL) { printf("%d \n", p->val); p = p->next; } printf("\n"); } /* 插入一个节点并插入数据 */ ListNode *insertListNode(ListNode *head, int val) { ListNode *node = newListNode(val); if(head == NULL) { head = node; } else { ListNode *temp = head; while(temp->next != NULL) { temp = temp->next; } temp->next = node; node->prev = temp; } return head; } int main(int argc, char *argv[]) { ListNode *head = NULL; ListNode *node = NULL; head = newListNode(1); printListNode(head); head = insertListNode(head, 2); node = head->next; printListNode(node); printf("插一个值为:"); head = insertListNode(head, 5); printListNode(node->next); printf("上一个节点值为:\n"); printListNode(node->prev); printf("所有节点:\n"); printAllListNode(head); freeListNode(head); }
测试结果:
liujianhua@liujianhuadeMac-mini HelloC % ./a.out 1 2 插一个值为:5 上一个节点值为: 1 所有节点: 1 2 5
双向链表提供了可以向上,向后的访问。
扫一扫,分享给好友
五彩晶圆(高级)
6991
0
看了楼主的这个介绍,大致了解了单向链表和环形链、双向链表的不同了
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »