逆转链表

单链表逆转

本题要求实现一个函数,将给定的单链表逆转

函数接口定义

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 */
}

图示

posted @ 2022-04-15 11:37  里列昂遗失的记事本  阅读(53)  评论(0)    收藏  举报