题意:
本题要求实现一个函数,将给定的单链表逆转。
函数接口定义:
List Reverse( List L );
其中List
结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L
是给定单链表,函数Reverse
要返回被逆转后的链表。
思路:单链表的逆转,即将链表反向输出。因此可以考虑将原单链表的每一个元素的Next节点为原链表中它的上一个元素。
原链表的头结点的Next节点即为NULL,同时原链表尾部元素为新链表的头部。
例如:
原链表 :1,2,3,4,5。元素1 : Next 节点为NULL;元素2 : Next 节点为 1;元素3 : Next 节点为2。。。。。。
利用传递性,变化后链表为: 5,4,3,2,1。
关键代码:
List Reverse(List L){
List p1 = NULL,p2 = NULL;
while(L){
p1 = L->Next; // 链表往下移
L->Next = p2; //从前往后推它经逆序后