剑指offer刷题笔记六:从尾到头打印链表(正式题解)

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 剑指offer刷题笔记六:从尾到头打印链表(正式题解),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

注:链表的实现见上一篇文章链接: 剑指offer刷题笔记六:从尾到头打印链表(前导文章之一文搞懂C++单向链表).

  • 题目:输入一个链表的头节点,反过来打印出每个结点的值。
  • 分析:一共采取三种方法。
    1、将链表中的结点指针反转过来,即改变链表的方向。此种方法比较容易想到,但是会遇到改变原来链表结构的问题。
    2、用栈实现先进后出的顺序,每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始输出每个结点的值,此时输出的结点的顺序已经反转过来。
    3、利用递归来实现,递归本质上也是一个栈结构。
  • 代码:
    链表的实现见文章开头链接所指向的文章。以下展示反向输出的代码。
#include <iostream>
#include"ListNode.h"
#include<stack>//利用栈是需要包含的头文件

void method1(ListNode* pNode1, ListNode* pNode2, ListNode* pNode3) {//方法一:改变链表结构
    ConnectListNodes(pNode3, pNode2);
    ConnectListNodes(pNode2, pNode1);

    pNode1->m_pNext = nullptr;

    PrintList(pNode3);
}

void method2(ListNode* pHead) {//方法二:利用栈结构
    std::stack<ListNode*>nodes;
    ListNode* pNode = pHead;
    while (pNode != nullptr) {
        nodes.push(pNode);
        pNode = pNode->m_pNext;
    }

    while (!nodes.empty()) {
        pNode = nodes.top();
        std::cout << pNode->m_nValue << "\t";
        nodes.pop();
    }
    std::cout << std::endl;
}

void method3(ListNode* pHead) {//利用递归
    if (pHead != nullptr) {
        if (pHead->m_pNext != nullptr) {
            method3(pHead->m_pNext);
        }
        std::cout << pHead->m_nValue << "\t";
    }
}
int main()
{
    std::cout << "Test begins!\n";
    ListNode* pNode1 = CreateListNode(1);
    ListNode* pNode2 = CreateListNode(2);
    ListNode* pNode3 = CreateListNode(3);

    ConnectListNodes(pNode1, pNode2);
    ConnectListNodes(pNode2, pNode3);

    //PrintList(pNode1);//从前往后打印链表
    //method1(pNode1, pNode2, pNode3);//使用方法1
    //method2(pNode1);//使用方法2
    method3(pNode1);//使用方法3

    DestroyList(pNode1);
    
    std::cout << "\nTest ends!\n";
}
  • 运行结果:
    从前往后打印链表:
    在这里插入图片描述
    方法一结果:
    在这里插入图片描述
    方法二结果:
    在这里插入图片描述
    方法三结果:
    在这里插入图片描述

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

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/130586.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!