当前位置:网站首页 > 技术博客 > 正文

双向链表 c



双向链表

是一种常见的

数据结构

,与单向

链表

相比,它每个节点都有两个指针,分别指向前驱节点和后继节点。这样,

双向链表

可以

实现

双向遍历,插入和删除操作也更加方便。

以下是用C语言

实现 双向链表

的代码:

 #include <stdio.h> #include <stdlib.h>  // 双向链表 节点结构体 typedef struct ListNode { int val; struct ListNode *prev; struct ListNode *next; } ListNode;  // 创建 双向链表 节点 ListNode *createNode(int val) { ListNode *node = (ListNode *)malloc(sizeof(ListNode)); node->val = val; node->prev = NULL; node->next = NULL; return node; }  // 插入节点到 双向链表 头部 ListNode *insertAtHead(ListNode *head, int val) { ListNode *node = createNode(val); if (head == NULL) { head = node; } else { node->next = head; head->prev = node; head = node; } return head; }  // 插入节点到 双向链表 尾部 ListNode *insertAtTail(ListNode *head, int val) { ListNode *node = createNode(val); if (head == NULL) { head = node; } else { ListNode *cur = head; while (cur->next != NULL) { cur = cur->next; } cur->next = node; node->prev = cur; } return head; }  // 删除 双向链表 中的节点 ListNode *deleteNode(ListNode *head, int val) { if (head == NULL) { return NULL; } ListNode *cur = head; while (cur != NULL && cur->val != val) { cur = cur->next; } if (cur == NULL) { return head; } if (cur == head) { head = head->next; if (head != NULL) { head->prev = NULL; } } else { cur->prev->next = cur->next; if (cur->next != NULL) { cur->next->prev = cur->prev; } } free(cur); return head; }  // 打印 双向链表 void printList(ListNode *head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } printf(" "); }  // 主函数 int main() { ListNode *head = NULL; head = insertAtHead(head, 1); head = insertAtHead(head, 2); head = insertAtTail(head, 3); printList(head); // 2 1 3 head = deleteNode(head, 2); printList(head); // 1 3 head = deleteNode(head, 3); printList(head); // 1 head = deleteNode(head, 1); printList(head); // return 0; } 

版权声明


相关文章:

  • uboot文件结构2025-05-13 20:30:06
  • 性能和压力测试2025-05-13 20:30:06
  • 安卓开机动画特效软件1.02025-05-13 20:30:06
  • dos文件转换成pdf2025-05-13 20:30:06
  • 曼彻斯特编码在线编码2025-05-13 20:30:06
  • cas单点登录前后端分离2025-05-13 20:30:06
  • 协程 go2025-05-13 20:30:06
  • java使用内部类的优缺点2025-05-13 20:30:06
  • 括号匹配算法栈的思想2025-05-13 20:30:06
  • 数据库测试是什么2025-05-13 20:30:06