提示信息

C语言实现的单链表结构

烟生 已关注

在C语言中,实现一个简单的单链表结构需要定义节点结构和相关操作函数。下面是一个完整的单链表实现,包括节点结构定义、链表初始化、节点插入、节点删除和链表遍历等基本操作。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 定义链表节点结构
  4. typedef struct Node {
  5. int data;
  6. struct Node* next;
  7. } Node;
  8. // 创建一个新的节点
  9. Node* createNode(int data) {
  10. Node* newNode = (Node*)malloc(sizeof(Node));
  11. if (!newNode) {
  12. printf("内存分配失败\n");
  13. exit(-1);
  14. }
  15. newNode->data = data;
  16. newNode->next = NULL;
  17. return newNode;
  18. }
  19. // 在链表头部插入新节点
  20. void insertAtHead(Node** head, int data) {
  21. Node* newNode = createNode(data);
  22. newNode->next = *head;
  23. *head = newNode;
  24. }
  25. // 在链表尾部插入新节点
  26. void insertAtTail(Node** head, int data) {
  27. Node* newNode = createNode(data);
  28. if (*head == NULL) {
  29. *head = newNode;
  30. return;
  31. }
  32. Node* temp = *head;
  33. while (temp->next != NULL) {
  34. temp = temp->next;
  35. }
  36. temp->next = newNode;
  37. }
  38. // 删除指定值的节点
  39. void deleteNode(Node** head, int key) {
  40. Node* temp = *head;
  41. Node* prev = NULL;
  42. // 如果头节点就是要删除的节点
  43. if (temp != NULL && temp->data == key) {
  44. *head = temp->next;
  45. free(temp);
  46. return;
  47. }
  48. // 查找要删除的节点,同时记录前一个节点
  49. while (temp != NULL && temp->data != key) {
  50. prev = temp;
  51. temp = temp->next;
  52. }
  53. // 如果找不到节点
  54. if (temp == NULL) return;
  55. // 从链表中删除节点
  56. prev->next = temp->next;
  57. free(temp);
  58. }
  59. // 打印链表
  60. void printList(Node* node) {
  61. while (node != NULL) {
  62. printf("%d -> ", node->data);
  63. node = node->next;
  64. }
  65. printf("NULL\n");
  66. }
  67. // 示例使用
  68. int main() {
  69. Node* head = NULL;
  70. insertAtHead(&head, 3);
  71. insertAtHead(&head, 1);
  72. insertAtTail(&head, 4);
  73. insertAtTail(&head, 5);
  74. printf("初始链表: ");
  75. printList(head);
  76. deleteNode(&head, 1);
  77. printf("删除1后: ");
  78. printList(head);
  79. deleteNode(&head, 5);
  80. printf("删除5后: ");
  81. printList(head);
  82. return 0;
  83. }

说明:

  1. 节点结构Node结构体定义链表的节点,包含数据部分和指向下一节点的指针。
  2. 创建节点createNode函数用于创建新节点并分配内存。
  3. 插入操作
    • insertAtHead用于在链表头部插入节点。
    • insertAtTail用于在链表尾部插入节点。
  4. 删除操作deleteNode根据给定值删除节点。
  5. 打印操作printList用于遍历和输出链表内容。

这段代码演示了如何操作一个简单的单链表结构,包括插入和删除节点的基本功能。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
烟生 关注 已关注

最近一次登录:2024-11-20 21:10:23   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图