#include <stdio.h>
#include "stdlib.h"
// 定义链表节点结构
typedef struct Lnode {
int data;
struct Lnode *next;
} Lnode;
// 函数用于逆序单链表
void contrary(Lnode *&HL) {
Lnode *prev = NULL; // 前驱节点初始化为NULL
Lnode *current = HL; // 当前节点从头节点开始
Lnode *next = NULL; // 后继节点初始化为NULL
// 遍历链表,并反转每个节点的指向
while (current != NULL) {
next = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的下一个指向其前驱节点
prev = current; // 移动前驱节点到当前节点
current = next; // 移动到下一个节点
}
HL = prev; // 更新头指针指向新的头节点(原链表的最后一个节点)
}
// 辅助函数:打印链表
void printList(Lnode *head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
// 测试代码
int main() {
// 创建测试链表 1->2->3->4->NULL
Lnode *head = (Lnode*)malloc(sizeof(Lnode));
Lnode *second = (Lnode*)malloc(sizeof(Lnode));
Lnode *third = (Lnode*)malloc(sizeof(Lnode));
Lnode *fourth = (Lnode*)malloc(sizeof(Lnode));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = fourth;
fourth->data = 4;
fourth->next = NULL;
printf("Original list:\n");
printList(head);
contrary(head);
printf("Reversed list:\n");
printList(head);
// 清理内存...
return 0;
}