zoukankan      html  css  js  c++  java
  • PTA 6-1 单链表逆转

    本题是一个非常经典的题目:单链表逆转。

    这是链表结点的定义:

    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    

    先给出实现的代码:

    List Reverse( List L )
    {
        List before = NULL, head = L, next;
        while(head != NULL)
        {
            next = head->Next;      // 记录当前值的下一个值
            head->Next = before;    // 修改当前结点的下一个为上个结点
            before = head;          // 上一个结点修改为本结点
            head = next;            // 当前结点为下一个结点
        }
        return before;
    };
    

    代码的思想很简单,就是我们需要将每个结点的指针改变过来。

    当我们从前往后将当前结点的指针指向前一个的时候,我们不可避免的就需要至少三个指针:

    1. 之前结点的指针
    2. 当前结点的指针
    3. 下一个结点的指针

    注意在这个过程中,我们如果修改了当前结点指向的下一个结点的位置,那么我们必然就找不到之前这个结点的下一个结点。

    所以我们需要保存下一个结点,以免修改当前结点指向的下一个指针之后找不到下一个结点的位置了。

  • 相关阅读:
    拉姆达表达式(lambda Expressions)
    Func,Action 的介绍
    VS2012 此模板尝试加载组件程序集”NuGet.VisualStudio.interop,Version=1.0.0.0 的解决
    444 英语口语
    Base algorithm
    Windows Search Service
    Windows Azure Storage
    HDU 3395 Special Fish
    CodeForces 235B Let's Play Osu!
    HDU 3435 A new Graph Game
  • 原文地址:https://www.cnblogs.com/veeupup/p/12701780.html
Copyright © 2011-2022 走看看