逆转链表
单链表逆转
本题要求实现一个函数,将给定的单链表逆转
函数接口定义
List Reverse(List L);
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node{
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L是给定单链表,函数Reverse要返回被逆转后的链表
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print(List L); /* 细节在此不表 */
List Reverse(List L);
int main(void){
List L1, L2;
L1 = Read();
L2 = Reverse(L1);
Print(L1);
Print(L2);
}
输入样例:
5
1 3 4 5 2
输出样例:
1
2 5 4 3 1
代码:
List Reverse(List L){
PtrToNode p,q;
p=NULL; /* 使得p指向NULL */
while(L){ /* 循环的L时原来L的后驱结点,当原来L的后驱结点为NULL时结束循环 */
q=L->Next; /* 使用q纪录L的后驱结点 */
L->Next=p; /* 逆转链表,表尾的Next指向NULL */
p=L; /* 更新p的位置,将L的位置给p */
L=q; /* 将原来L的后驱结点的位置给L */
}
return p; /* 返回L位置,循环结束前更新了L到p,L的后一个到q */
}