19.单链表反转
题目描述
根据一个整数序列构造一个单链表,然后将其反转。
例如:原单链表为 2 3 4 5 ,反转之后为5 4 3 2
输入描述
输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开
输出描述
针对每组测试数据,输出包括两行,分别是反转前和反转后的链表元素,用空格隔开
如果链表为空,则只输出一行,list is empty
输入示例
5 1 2 3 4 5
0
输出示例
1 2 3 4 5
5 4 3 2 1
list is empty
题解(C语言):
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct LinkedNode {
int val;
struct LinkedNode* next;
};
struct LinkedNode* reverseList(struct LinkedNode* head) {
struct LinkedNode* temp; // 保存 cur 的下一个节点
struct LinkedNode* cur = head;
struct LinkedNode* pre = NULL;
while (cur) {
temp = cur->next; // 保存一下 cur 的下一个节点,因为接下来要改变 cur->next
cur->next = pre; // 翻转操作
// 更新 pre 和 cur 指针
pre = cur;
cur = temp;
}
return pre;
}
void printLinkedList(struct LinkedNode* head) {
struct LinkedNode* cur = head;
while (cur != NULL) {
printf("%d ", cur->val)