以下是一个简单的C语言单链表反转代码示例:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
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 = new_data;
new_node->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
函数中,创建链表并进行测试。