剑指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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pychram引入conda环境[通俗易懂]

    Pychram引入conda环境[通俗易懂]Pychram引入conda环境一、前言考虑到:①pycharm比Spyder功能全面,②anaconda的环境配置方便,这两个因素,所以想要在pycharm上引入condaenvironment,充分利用Anaconda的库函数。二、导入步骤1.创建一个project,并在File栏中,点击settings…,进入设置界面2.在setting界面下,找到当前工程,并选中其中的PythonInterpreter3.点击右上角的齿轮图表4.在弹出的会话框中,选中Add…5.在Ad

    2022年8月26日
    6
  • arp欺骗可以利用哪些工具来实现_arp防欺骗功能

    arp欺骗可以利用哪些工具来实现_arp防欺骗功能这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年10月7日
    3
  • Navicat 15 激活补丁破解方法

    Navicat 15 激活补丁破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    133
  • selenium自动化测试实战基于python_初级java工程师要求

    selenium自动化测试实战基于python_初级java工程师要求一、Selenium介绍Selenium是什么?一句话,自动化测试工具。它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器,如果你在这些浏览器里面安装一个Selenium的插件,那么便可以方便地实现Web界面的测试。Selenium2,又名WebDriver,它的主要新功能是集成了Selenium1.0以及WebDriver(WebDr…

    2022年10月4日
    5
  • 关于c++操作符的优先级

    优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。具有最高优

    2021年12月20日
    59

发表回复

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

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