以下是一个简单的C语言单链表反转代码示例:
#include#include // 定义链表节点结构体 typedef struct Node { int data; struct Node* next; } Node; // 添加节点到链表尾部 void append(Node** head_ref, int new_data) { // 创建新节点 Node* new_node = (Node*)malloc(sizeof(Node)); new_node->data = https://www.yisu.com/ask/new_data;>next = NULL; // 如果链表为空,则将新节点设为头节点 if (*head_ref == NULL) { *head_ref = new_node; return; } // 找到链表的最后一个节点 Node* last_node = *head_ref; while (last_node->next != NULL) { last_node = last_node->next; } // 将新节点连接到链表的最后 last_node->next = new_node; } // 反转链表 void reverse(Node** head_ref) { Node* prev_node = NULL; Node* current_node = *head_ref; Node* next_node = NULL; while (current_node != NULL) { // 保存下一个节点的指针 next_node = current_node->next; // 反转当前节点的指针 current_node->next = prev_node; // 移动指针 prev_node = current_node; current_node = next_node; } // 将头节点指向反转后的链表 *head_ref = prev_node; } // 打印链表 void printList(Node* node) { while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } int main() { Node* head = NULL; // 添加节点到链表 append(&head, 1); append(&head, 2); append(&head, 3); append(&head, 4); // 打印原链表 printf("Original list: "); printList(head); // 反转链表 reverse(&head); // 打印反转后的链表 printf("Reversed list: "); printList(head); return 0; }
这段代码首先定义了一个链表节点结构体 Node
,包含一个整型数据和一个指向下一个节点的指针。然后,通过 append
函数将节点添加到链表的尾部。接着,通过 reverse
函数将链表反转。最后,通过 printList
函数打印链表。在 main
函数中,创建链表并进行测试。