zoukankan      html  css  js  c++  java
  • 【线性结构】单链表逆转

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

    函数接口定义:

    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 }


    作者:PennyXia
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    EF-CodeFirst-3搞事
    EF-CodeFirst-1 玩起来
    EF-CodeFirst-2玩的嗨
    Asp.Net SignalR Hub类中的操作详解
    Asp.Net SignalR GlobalHost外部通知
    Asp.Net SignalR 多平台的Client与Server
    Asp.Net SignalR 集群会遇到的问题
    常用数学符号读法大全
    关于神经网络拟合任意函数的讨论
    Asp.net MVC使用FormsAuthentication,MVC和WEB API可以共享身份认证 (转载)
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12489211.html
Copyright © 2011-2022 走看看