C语言单链表反转详解:步骤、代码和示例
"C语言单链表反转详解:步骤、代码和示例"\n\n在C语言中,可以使用结构体和指针来实现单链表的反转。\n\n首先,我们需要定义一个结构体来表示链表的节点,其中包含两个成员,一个是存储数据的变量,另一个是指向下一个节点的指针。\n\nc\ntypedef struct Node {\n int data;\n struct Node* next;\n} Node;\n\n\n接下来,我们可以编写一个函数来创建链表并返回链表的头节点。\n\nc\nNode* createLinkedList(int* arr, int size) {\n Node* head = NULL;\n Node* tail = NULL;\n\n for (int i = 0; i < size; i++) {\n Node* newNode = (Node*)malloc(sizeof(Node));\n newNode->data = arr[i];\n newNode->next = NULL;\n\n if (head == NULL) {\n head = newNode;\n tail = newNode;\n } else {\n tail->next = newNode;\n tail = newNode;\n } \n }\n\n return head;\n}\n\n\n然后,我们可以编写一个函数来反转链表。\n\nc\nNode* reverseLinkedList(Node* head) {\n Node* prev = NULL;\n Node* curr = head;\n\n while (curr != NULL) {\n Node* next = curr->next;\n curr->next = prev;\n prev = curr;\n curr = next;\n }\n\n return prev;\n}\n\n\n最后,我们可以编写一个函数来打印链表的元素。\n\nc\nvoid printLinkedList(Node* head) {\n Node* curr = head;\n\n while (curr != NULL) {\n printf("%d ", curr->data);\n curr = curr->next;\n }\n\n printf("\n");\n}\n\n\n下面是一个完整的例子:\n\nc\n#include <stdio.h>\n#include <stdlib.h>\n\ntypedef struct Node {\n int data;\n struct Node* next;\n} Node;\n\nNode* createLinkedList(int* arr, int size) {\n Node* head = NULL;\n Node* tail = NULL;\n\n for (int i = 0; i < size; i++) {\n Node* newNode = (Node*)malloc(sizeof(Node));\n newNode->data = arr[i];\n newNode->next = NULL;\n\n if (head == NULL) {\n head = newNode;\n tail = newNode;\n } else {\n tail->next = newNode;\n tail = newNode;\n } \n }\n\n return head;\n}\n\nNode* reverseLinkedList(Node* head) {\n Node* prev = NULL;\n Node* curr = head;\n\n while (curr != NULL) {\n Node* next = curr->next;\n curr->next = prev;\n prev = curr;\n curr = next;\n }\n\n return prev;\n}\n\nvoid printLinkedList(Node* head) {\n Node* curr = head;\n\n while (curr != NULL) {\n printf("%d ", curr->data);\n curr = curr->next;\n }\n\n printf("\n");\n}\n\nint main() {\n int arr[] = {1, 2, 3, 4, 5};\n int size = sizeof(arr) / sizeof(arr[0]);\n\n Node* head = createLinkedList(arr, size);\n printf("Original Linked List: ");\n printLinkedList(head);\n\n Node* newHead = reverseLinkedList(head);\n printf("Reversed Linked List: ");\n printLinkedList(newHead);\n\n return 0;\n}\n\n\n输出结果为:\n\n\nOriginal Linked List: 1 2 3 4 5 \nReversed Linked List: 5 4 3 2 1 \n\n\n这样就完成了单链表的反转。\n\n
原文地址: https://www.cveoy.top/t/topic/qzvY 著作权归作者所有。请勿转载和采集!