zoukankan      html  css  js  c++  java
  • 数据结构——反转单链表

    近期看了《剑指offer》这本书。遇到了一个问题:反转链表
    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。
    链表结点定义例如以下:

    struct ListNode
    {
        int _data;
        ListNode * _pNext;
    };
    

    解决方式例如以下:

    ListNode * ReverseList(ListNode * pHead)
    {
    
        ListNode * pRevesedHead = nullptr;//反转后的头结点
        ListNode * pNode = pHead;//当前结点
        ListNode * pPrev = nullptr;//前一结点
        while (pNode != nullptr)//推断非空
        {
            ListNode * pNext = pNode->_pNext;//下一结点(用pNext保存,避免链表断裂)
            if (pNext == nullptr)//假设仅仅有一个结点
            {
                pRevesedHead = pNode;//则直接返回当前结点
            }
            pNode->_pNext = pPrev;//反转操作
            pPrev = pNode;//将前一结点指针后移到当前结点位置
            pNode = pNext;//将当前结点指针后移到下一结点位置
        }
        return pRevesedHead;//返回 反转后的头结点
    }

    假设不绘图。我是怎么都想不出来的。脑子都晕了~~~
    后面看别人的博客,再结合自己画的图,勉强了解了反转链表的算法思想。

    话不多说,以下看我的图解:

    这里写图片描写叙述

    这个题目还有要注意的是:

    • 推断输入的链表是否为空
    • 注意防止反转后链表出现断裂
    • 返回的反转之后的头结点不是原始链表的尾结点

    以下是我的測试代码:

    //创建一个新链表
    void CreateList(ListNode * L,int n)
    {
        cin>>L->_data;//输入第一个结点的数据值
        n--;
        for (int i = 0; i < n; i++)
        {
            ListNode * p = new ListNode;
            cin>>p->_data;
            p->_pNext = nullptr;
            L->_pNext = p;
            L = p;
        }
    }
    
    //显示链表
    void showList(ListNode * L)
    {
        ListNode * p = L;
        while (p)
        {
            cout<<p->_data<<' ';
            p = p->_pNext;
        }
        cout<<endl;
    }
    
    //主函数
    int main()
    {
        ListNode * L = new ListNode;
        L->_pNext = nullptr;
        CreateList(L,5);
        showList(L);
        ListNode * p;
        p = ReverseList(L);
        showList(p);
        return 0;
    }

    測试结果例如以下:

    这里写图片描写叙述

    就说这么多。如有不足之处。还请指教。

  • 相关阅读:
    Binary Tree Level Order Traversal II
    图和图的遍历算法
    Remove Duplicates from Sorted List
    Binary Tree Preorder Traversal
    Merge Sorted Array
    [POJ2774][codevs3160]Long Long Message
    [BZOJ2251][2010Beijing Wc]外星联络
    [BZOJ1692][Usaco2007 Dec]队列变换
    [BZOJ1717][Usaco2006 Dec]Milk Patterns 产奶的模式
    [BZOJ1131][POI2008]Sta
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7121908.html
Copyright © 2011-2022 走看看