【线性结构】单链表逆转

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

函数接口定义:

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()
{
    List L1, L2;
    L1 = Read();
    L2 = Reverse(L1);
    Print(L1);
    Print(L2);
    return 0;
}

/* 你的代码将被嵌在这里 */
 

输入样例:

5
1 3 4 5 2

输出样例:

1
2 5 4 3 1

思路:

  • 使用三个指针,分别指向当前要翻转的结点curr,当前的前一个结点prev,当前的后一个结点next,通过移动指针逐个翻转;
  • 如果是空链表或者只有一个结点,那么就直接返回不需要翻转;

 

 

 1 List Reverse(List L){
 2     if(L==NULL||L->Next==NULL)
 3         return L;
 4     List prev=NULL;//重要
 5     List curr=L;
 6     List next;
 7     while(curr){
 8         next=curr->Next;
 9         curr->Next=prev;
10         prev=curr;
11         curr=next;
12     } 
13     return prev;
14 }

 



posted @ 2020-03-14 09:02  PennyXia  阅读(595)  评论(0编辑  收藏  举报