zoukankan      html  css  js  c++  java
  • PTA——6-1 单链表逆转 (20分)

    题目地址

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

    函数接口定义:

    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->Next 的指向

    第一种后续补充

    【第二种思路】

    List Reverse(List L){
        List p1 = NULL,p2 = NULL;
        while(L){
            p2 = L->Next;
            L->Next = p1;
            p1 = L;
            L = p2;
        }
        return p1;
    }

    第一次就是将 p1 【 NULL】 赋值给 原链表的头结点的Next,然后让 p1 指向当前 L 结点。

    下一次就是令 当前结点 L' 的 Next 指向上一个结点 L,从而修改原链表 List->Next 的指向 

  • 相关阅读:
    Tinkoff Challenge
    Tinkoff Challenge
    Tinkoff Challenge
    Tinkoff Challenge
    整体二分
    树链剖分+LCT
    上下界网络流
    莫队
    可并堆
    bzoj_1033: [ZJOI2008]杀蚂蚁antbuster
  • 原文地址:https://www.cnblogs.com/expedition/p/12219032.html
Copyright © 2011-2022 走看看