码迷,mamicode.com
首页 > 其他好文 > 详细

【List习题】单链表逆转

时间:2020-03-14 10:47:23      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:void   div   color   com   param   要求   node   clipboard   meta   

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

函数接口定义:

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 }

 



【List习题】单链表逆转

标签:void   div   color   com   param   要求   node   clipboard   meta   

原文地址:https://www.cnblogs.com/PennyXia/p/12489211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!