剑指Offer面试题:4.从尾到头打印链表建议收藏

一题目:从尾到头打印链表代码实现采用两种方法实现:(1)不修改原列表,使用stack的方式实现(2)修改原列表,对元列表逆序两种方法都在下面的代码中:

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

一 题目:从尾到头打印链表

题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值。

  剑指Offer面试题:4.从尾到头打印链表建议收藏

代码实现

  采用两种方法实现:

  (1) 不修改原列表,使用stack的方式实现

  (2)修改原列表,对元列表逆序

  两种方法都在下面的代码中:

struct Node
{
    int data;
    Node* pNext;
};

class ListEx
{
private:
    Node *m_pHead;
    Node *m_pTail;
public:
    ListEx()
    {
        m_pHead = NULL;
        m_pTail = NULL;
    }
    ~ListEx()
    {
        Node *pNode = m_pHead;
        Node *pNext = NULL;
        while(pNode)
        {
            pNext = pNode->pNext;
            delete pNode;
            pNode = pNext;
        }

        m_pHead = NULL;
        m_pTail = NULL;
    }
    void add(int data)
    {
        Node *pNode = new Node;
        pNode->data = data;
        pNode->pNext = NULL;

        if (!m_pHead)
        {
            m_pTail = m_pHead = pNode;
        }
        m_pTail->pNext = pNode;
        m_pTail = pNode;
    }

    Node* GetHead() {return m_pHead;}

    // 改变链表的内容,将其逆序
    void ReserveList()
    {
        m_pTail = m_pHead;
        Node *p1 = m_pHead;
        Node *p2 = p1->pNext;
        p1->pNext = NULL;        //关键位置
        Node *pTemp = NULL;     
        while (p1 && p2)
        {
            pTemp = p2->pNext;   // 关键位置
            p2->pNext = p1;
            p1 = p2;
            p2 = pTemp;
        }

        m_pHead = p1;
    }
};

// 从尾打印链表
void PrintList(Node *pHead)
{
    stack<int> NodeStack;
    Node *pNode = pHead;
    while (pNode)
    {
        NodeStack.push(pNode->data);
        pNode = pNode->pNext;
    }
    
    while (!NodeStack.empty())
    {
        cout << NodeStack.top();
        NodeStack.pop();
    }
    cout << endl;
}

void main()
{
    ListEx list;
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    list.add(8);
    list.add(9);

    Node *pHead = list.GetHead();
    cout << "不修改原列表,使用stack方法:" << endl;
    PrintList(pHead);
    list.ReserveList();

    cout << "修改原列表,将原列表逆序:" << endl;
    pHead = list.GetHead();
    PrintList(pHead);
    return;
}

剑指Offer面试题:4.从尾到头打印链表建议收藏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120171.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode-221. 最大正方形(动态规划)「建议收藏」

    leetcode-221. 最大正方形(动态规划)「建议收藏」在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。示例 1:输入:matrix = [[“1″,”0″,”1″,”0″,”0”],[“1″,”0″,”1″,”1″,”1”],[“1″,”1″,”1″,”1″,”1”],[“1″,”0″,”0″,”1″,”0”]]输出:4示例 2:输入:matrix = [[“0″,”1”],[“1″,”0”]]输出:1示例 3:输入:matrix = [[“0”]]输出:0 提示:m == ma

    2022年8月9日
    5
  • mac 安装配置android sdk[通俗易懂]

    mac 安装配置android sdk[通俗易懂]一、安装sdk在mac上可以使用brew包管理工具来安装软件,所以要安装sdk,首先需要安装brew包,详情可参照我上一篇博客,这里就不过多赘述。1、安装好brew后,通过以下命令进行sdk的安装brewinstallandroid-sdk2、查看是否已安装成功,在终端执行:android二、配置sdk1、查看sdk安装路径brewlistandroid-sdk可见,我的sdk的安装路径是在/opt/homebrew/Caskroom/android.

    2022年7月21日
    63
  • python激活码【2021.7最新】

    (python激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月20日
    64
  • 八个Android项目源码

    八个Android项目源码给大家分享几个Android开发项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于AndroidStudio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。有句话说,不贴墙纸的装修都是耍流氓,无源码无效果图的文章也算是耍流氓,尴尬,那就直接上图吧。最近在整理GitHub,打算把一些以前做过的项目中部分功能和使用的技术点资料上传,回头也和大家分享。OK,要去忙了,再不去忙项目,测试版出不来就危险了,希望有一天不用敲代码也可以吃到馒头,吼吼~~

    2022年6月6日
    33
  • mybatiscodehelperpro激活码[最新免费获取]

    (mybatiscodehelperpro激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    406
  • DeepLearning之LSTM模型输入参数:time_step, input_size, batch_size的理解[通俗易懂]

    DeepLearning之LSTM模型输入参数:time_step, input_size, batch_size的理解[通俗易懂]1.LSTM模型输入参数理解(LongShort-TermMemory)lstm是RNN模型的一种变种模式,增加了输入门,遗忘门,输出门。LSTM也是在时间序列预测中的常用模型。小白我也是从这个模型入门来开始机器学习的坑。LSTM的基本概念与各个门的解释已经有博文写的非常详细:推荐博文:【译】理解LSTM(通俗易懂版)这篇文章写的非常详细,生动,概念解释的非常清楚。我也是从这个…

    2025年8月31日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号