关闭

STL链表反向输出实例

标签: C++list链表反向输出
423人阅读 评论(0) 收藏 举报
分类:

C++ STL list反向输出实例

    给定一个单向链表,从尾到头输出其每个值。
代码:

#include <iostream>
#include "stdio.h"
#include <list>
#include <stack>
using namespace std;

//从尾到头输出list--1.递归方法 
void list_reverse1(list<int> &mylist, list<int>::iterator &it)//传递引用比传值副本更高效 
{
    if(mylist.empty()) //判断list是否为空,如果没有判断即便链表为空后面仍会执行一遍cout 
        return;
    it++;
    if(it != mylist.end())
    {
        list_reverse1(mylist, it);  
    }
    cout<<*(--it)<<endl; 
    /**
    *这里要注意一点是it是对象的引用或者理解为对象指针,
    *所以对它的值得修改(it++) 会影响递归的其他轮回。
    *所以最后输出时要进行--it
    */ 
}

    /**
    *递归有个通病,就是当递归次数过长,比如这里的链表过长时,可能会导致函数调用栈溢出.
    *可以用下面循环的方式实现避免这个问题. 
    */ 

//从尾到头输出list--2.栈+循环方法
    /**
    * list是从头到尾循迹的,要将其从尾到头输出, 会想到stack栈结构,
    *所以可以先把list一一取出放到stack暂存.然后后面只需要迭代输出stack即可.
    *这个思想同样可以用于list的反转 
    */
void list_reverse2(list<int> &mylist)
{
    stack<int> mystack;
    if(mylist.empty()) //判断list是否为空,如果没有判断即便链表为空后面仍会执行一遍cout 
        return;
    list<int>::iterator it = mylist.begin();
    while(it != mylist.end())
    {
        mystack.push(*it);
        it++;
    }
    while(!mystack.empty())
    {
        cout<<mystack.top()<<endl;
        mystack.pop();  
    }
}

int main()
{
    list<int> mylist;
    for(int i=0; i < 5; i++)
        mylist.push_back(i);
    list<int>::iterator it = mylist.begin();

    //逆序输出 
    cout<<"逆序输出" <<endl;
    //list_reverse1(mylist, it);
    list_reverse2(mylist);

    //顺序输出 
    cout<<"顺序输出" <<endl;
    for(it = mylist.begin(); it != mylist.end(); it++)
        cout<<*it<<endl;


    return 0;
}

运行输出:

逆序输出
4
3
2
1
0
顺序输出
0
1
2
3
4

--------------------------------
Process exited after 0.01161 seconds with return value 0
请按任意键继续. . .

如果是头指针版本的链表,反向输出链表的思想一样,只是代码是用指针来处理,一样要用到递归。

markdown插入整段代码时发现只有第一行被当做是代码怎么破:

选定其他的代码,继续摁一下ctrl+k插入代码键就ok了。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【链表】C++链表反转、链表逆序打印

题目:C++实现链表逆序打印、链表反转 如何将链表逆序,取决于题目的要求。如果面试官只要求打印,一般不改动链表结构为好,如果要求改变链表的方向,则需要改变结构,再顺序打印。 方法1:只逆序打印,不改变...
  • yebanxin
  • yebanxin
  • 2016-07-18 15:46
  • 3812

反向输出一个链表(链表逆置)

/* This file was made for Link_list Exp on Linux Main.cpp  Founded in others' Blog ,Thanks for ...
  • Namer_Mega
  • Namer_Mega
  • 2014-12-17 10:27
  • 1384

链表常见操作java实现二:反转链表,从尾到头倒序遍历

1.反转链表反转链表在面试中非常常见。例如: 将原链表: 0->1->2->3 反转为新链表: 3->2->1->0 反转链表的一般思路是使用三个指针。其中,一个指针为当前节点,一个指针指向...
  • bitcarmanlee
  • bitcarmanlee
  • 2016-08-08 22:40
  • 5554

链表的创建和正向反向输出

需求:   给定一个链表的头部节点,从尾到头依次输出所有的节点值 分析:   1、思路一   比较容易想到的是,遍历链表,将节点值存到集合中,然后反向输出   2、思路二   一般是从...
  • upupday19
  • upupday19
  • 2017-12-07 19:51
  • 37

单链表的反向输出

问题 有一个带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值 思路一 对于单链表而言只能顺着指针域next顺序往下搜索,所以我的第一个思路是先顺序遍历一遍将所有的数据保存在一个数组中...
  • qq_14998713
  • qq_14998713
  • 2016-08-02 17:35
  • 974

将一个单向链表反向连接

  • 2011-11-28 11:29
  • 633B
  • 下载

用递归的方式实现字符串和单链表的反向打印

  • 2013-10-31 14:36
  • 804B
  • 下载

反向输出一个链表(链表逆置)

/* This file was made for Link_list Exp on Linux Main.cpp  Founded in others' Blog ,Thanks for ...
  • Namer_Mega
  • Namer_Mega
  • 2014-12-17 10:27
  • 1384

C语言:链表的反向输出(反转链表+栈结构)

/* 链表的反向输出 1.反转链表 2.链表节点从头到尾入栈,在出栈 */ # include # include # define SIZE 5 //初始定义链表的长度 //定义节...
  • wjb214149306
  • wjb214149306
  • 2015-08-18 13:32
  • 888

STL list链表用法详解

  • 2012-11-18 00:52
  • 38KB
  • 下载
    个人资料
    • 访问:222135次
    • 积分:3681
    • 等级:
    • 排名:第10248名
    • 原创:170篇
    • 转载:19篇
    • 译文:0篇
    • 评论:14条
    最新评论