#include <stdio.h>\n#include <stdlib.h>\n\n// 定义双向循环链表的节点结构\ntypedef struct Node {\n int data;\n struct Node* prev;\n struct Node* next;\n} Node;\n\n// 创建新节点\nNode* createNode(int data) {\n Node* newNode = (Node*)malloc(sizeof(Node));\n newNode->data = data;\n newNode->prev = NULL;\n newNode->next = NULL;\n return newNode;\n}\n\n// 在链表末尾插入节点\nvoid insertAtEnd(Node** head, int data) {\n Node* newNode = createNode(data);\n if (head == NULL) {\n head = newNode;\n newNode->next = newNode;\n newNode->prev = newNode;\n } else {\n Node last = (head)->prev;\n newNode->next = head;\n (head)->prev = newNode;\n newNode->prev = last;\n last->next = newNode;\n }\n}\n\n// 反向输出链表数据\nvoid reversePrint(Node head) {\n if (head == NULL) {\n printf("链表为空\n");\n return;\n }\n Node curr = head->prev;\n printf("链表反向输出:");\n while (curr != head) {\n printf("%d ", curr->data);\n curr = curr->prev;\n }\n printf("\n");\n}\n\nint main() {\n Node list1 = NULL;\n Node list2 = NULL;\n\n // 在链表1中插入数据\n insertAtEnd(&list1, 1);\n insertAtEnd(&list1, 2);\n insertAtEnd(&list1, 3);\n insertAtEnd(&list1, 4);\n\n // 输出链表1的数据\n printf("链表1的数据:");\n Node* curr = list1;\n do {\n printf("%d ", curr->data);\n curr = curr->next;\n } while (curr != list1);\n printf("\n");\n\n // 将链表1中的数据反向插入链表2\n Node* temp = list1;\n do {\n insertAtEnd(&list2, temp->data);\n temp = temp->next;\n } while (temp != list1);\n\n // 输出链表2的数据\n printf("链表2的数据:");\n curr = list2;\n do {\n printf("%d ", curr->data);\n curr = curr->next;\n } while (curr != list2);\n printf("\n");\n\n // 反向输出链表2的数据\n reversePrint(list2);\n\n return 0;\n}\n\n// 运行结果示例:\n// 链表1的数据:1 2 3 4\n// 链表2的数据:4 3 2 1\n// 链表反向输出:1 2 3 4

C语言双向循环链表:反向输出数据

原文地址: https://www.cveoy.top/t/topic/qbGl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录