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. 下一个结点的指针

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

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

  • 相关阅读:
    How to interpret complex C/C++ declarations (ZT)
    The Managed Thread Pool
    How slow is dynamic_cast?
    Type Safety
    sBRDF空间双向反射分布函数完全解析
    近日工作与生活梗概
    简单的环绕散射 Simple Wrap Diffuse From GPU GEMS1
    屈辱史
    难以忽视的细节
    物理学与计算机图形学中的HDR
  • 原文地址:https://www.cnblogs.com/veeupup/p/12701780.html
Copyright © 2011-2022 走看看