从尾部打印头部

栈 - 实现:

void printListReversingly_Iteratively(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();printf("%d ",pNode->m_nValue);nodes.pop();}
}

测试代码:

#include<iostream>
#include<stack>struct ListNode{int m_nValue;ListNode* m_pNext;
};ListNode* AddToTail(ListNode** pHead, int Value)
{ListNode* pNew = new ListNode();pNew->m_nValue = Value;pNew->m_pNext = nullptr;if(*pHead == NULL){*pHead = pNew;}else{ListNode* pNode = *pHead;while(pNode->m_pNext != nullptr)pNode = pNode->m_pNext;pNode->m_pNext = pNew;}return *pHead;
}void Delete(ListNode** pHead, int value)
{if(pHead == nullptr || *pHead == nullptr)return;ListNode* pToBeDelete = *pHead;if(value == 1)*pHead = pToBeDelete->m_pNext;else{ListNode* pNode = *pHead;for(int i=0;i<value-2;i++)pNode = pNode->m_pNext;pToBeDelete = pNode->m_pNext;pNode->m_pNext = pToBeDelete->m_pNext;}if(pToBeDelete!=nullptr){delete pToBeDelete;pToBeDelete = nullptr;}
}void print(ListNode* pHead){printf("LinkedList is:\n");while(pHead!=nullptr){printf("%d ", pHead->m_nValue);pHead = pHead->m_pNext;}printf("\n");
}void printListReversingly_Iteratively(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();printf("%d ",pNode->m_nValue);nodes.pop();}
}int main(){ListNode* pHead = nullptr;pHead = AddToTail(&pHead, 1);pHead = AddToTail(&pHead, 2);pHead = AddToTail(&pHead, 3);pHead = AddToTail(&pHead, 4);Delete(&pHead, 1);print(pHead);printListReversingly_Iteratively(&pHead);
}

运行结果:

递归 - 实现:

void printListReversingly_Recurrsively(ListNode* pHead)
{if(pHead!=nullptr){if(pHead->m_pNext!=nullptr){PrintListReversingly_Recurrsively(pHead->m_pNext);}printf("%d\t", pHead->m_nValue);}
}

测试代码:

#include<iostream>
#include<stack>struct ListNode{int m_nValue;ListNode* m_pNext;
};ListNode* AddToTail(ListNode** pHead, int Value)
{ListNode* pNew = new ListNode();pNew->m_nValue = Value;pNew->m_pNext = nullptr;if(*pHead == NULL){*pHead = pNew;}else{ListNode* pNode = *pHead;while(pNode->m_pNext != nullptr)pNode = pNode->m_pNext;pNode->m_pNext = pNew;}return *pHead;
}void Delete(ListNode** pHead, int value)
{if(pHead == nullptr || *pHead == nullptr)return;ListNode* pToBeDelete = *pHead;if(value == 1)*pHead = pToBeDelete->m_pNext;else{ListNode* pNode = *pHead;for(int i=0;i<value-2;i++)pNode = pNode->m_pNext;pToBeDelete = pNode->m_pNext;pNode->m_pNext = pToBeDelete->m_pNext;}if(pToBeDelete!=nullptr){delete pToBeDelete;pToBeDelete = nullptr;}
}void print(ListNode* pHead){printf("LinkedList is:\n");while(pHead!=nullptr){printf("%d ", pHead->m_nValue);pHead = pHead->m_pNext;}printf("\n");
}//void printListReversingly_Iteratively(ListNode** pHead)
//{
//    std::stack<ListNode*> nodes;
//
//    ListNode* pNode = *pHead;
//    while(pNode!=nullptr){
//            nodes.push(pNode);
//            pNode = pNode->m_pNext;}
//
//    printf("Revers LinkedList is:\n");
//    while(!nodes.empty()){
//            pNode = nodes.top();
//            printf("%d ",pNode->m_nValue);
//            nodes.pop();}
//}void printListReversingly_Recurrsiverly(ListNode* pHead)
{if(pHead!=nullptr){if(pHead->m_pNext!=nullptr){printListReversingly_Recurrsiverly(pHead->m_pNext);}printf("%d ",pHead->m_nValue);}
}int main(){ListNode* pHead = nullptr;pHead = AddToTail(&pHead, 1);pHead = AddToTail(&pHead, 2);pHead = AddToTail(&pHead, 3);pHead = AddToTail(&pHead, 4);Delete(&pHead, 1);print(pHead);
//    printListReversingly_Iteratively(&pHead);printListReversingly_Recurrsiverly(pHead);
}

运行结果:


对代码不满足,是任何真正有天才的程序员的根本特征。

链表C++ | 从尾部打印头部(使用栈、递归实现)_3相关推荐

  1. C 语言 链表的创建与打印

    C 语言 链表的创建与打印 /* 包含的头文件 */#include <stdio.h>#include <stdlib.h>/* 定义一个表示链表的结构体指针 */struc ...

  2. 打印Activity任务栈脚本:adb shell dumpsys activity

    #!/bin/bash while [ 1 ] do echo"****************************<-----开始----->*************** ...

  3. 二叉树打印叶子节点,非递归_使用递归打印链接列表中的备用节点

    二叉树打印叶子节点,非递归 Solution: 解: Input: A singly linked list whose address of the first node is stored in ...

  4. 剑指offer之中序打印二叉树(非递归实现)

    1 问题 中序打印二叉树(非递归实现),比如二叉树如下 /* 2* 3 5 * 1 4 2 3 * 3 2 1 5 1 4 2 3 中序:按左中右来打印二叉树,结果如下 3 1 2 3 1 4 5 2 ...

  5. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  6. [剑指offer][JAVA]面试题第[06]题[从尾到头打印链表][栈][递归]

    [问题描述][简单] 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回).示例 1:输入:head = [1,3,2] 输出:[2,3,1]限制: 0 < 链表长度 <= ...

  7. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  8. 数据结构与算法java - 03 链表,单向链表,逆序打印单向链表

    链表 Linked List 有序 链表是以节点的方式来存储,链式存储 每个节点包含 data 域, next 域:指向下一个节点 链表的各个节点不一定是连续存放 链表分带头节点的链表和没有头节点的链 ...

  9. Java实现单链表的逆序打印

    思路1:可以将链表进行反转,然后进行数据的输出即可,单链表反转地址如下https://blog.csdn.net/Kevinnsm/article/details/113763272 这个思路1肯定有 ...

最新文章

  1. vue 之 nextTick 与$nextTick
  2. Tomcat7目录结构详解(非常详细)
  3. 在大公司天天调参数,感觉快废了~
  4. Wi-Fi 6连续两年出货量国内登顶,锐捷无线靠什么这么6?
  5. 地震了?不,是心动了!
  6. RocketMq 消费消息的两种方式 pull 和 push
  7. UE4 AnimMontage
  8. 堆排序的应用-优先级队列
  9. 你所不知道的JavaScript数组
  10. Atitit 软件项目系统托盘图标解决方案
  11. android+接入易宝支付,iOS客户端连接易宝支付接口
  12. 四叶草efi_Clover Configurator for Mac(四叶草配置引导工具)
  13. 数仓建模—表设计规范
  14. 网络版的知乎点赞问题~
  15. 零基础学Java,现已转行一年
  16. 向指定的excel文件中追加数据
  17. python上传文件到onedrive_python-onedrive使用教程【linux备份至onedrive】 | C/C++程序员之家...
  18. 小时候,幸福很简单;长大后,简单很幸福!
  19. 数据挖掘之 数据介绍思维导图
  20. bootstra提供了六种列表效果

热门文章

  1. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
  2. Kotlin学习笔记17 反射Part1
  3. java 内部类and匿名类
  4. TikZ学习笔记(三)图形的标记与交点
  5. 代数学笔记4: Galois基本定理
  6. poj 1182 食物链 并查集
  7. vs2017编写模板类出现以下错误时:没有与参数列表匹配的构造函数……
  8. eclipse安装Android模拟器genymotion及其插件
  9. Linux的基本命令符
  10. 主板电源开关接口图解_组装电脑时主板跳线如何接?DIY装机主板接线教程