码迷,mamicode.com
首页 > 其他好文 > 详细

从尾到头打印链表

时间:2019-04-13 15:09:46      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:.com   rbegin   ext   inf   ref   link   push   技术   str   

解题思路:创建两个vector,第一个vector用来存储链表中的数据,第二个vector用来存储第一个vector的逆打印。

技术图片

1、单链表的构建 参照 C/C++中创建(带头结点、不带头结点的)单链表

2、vector的使用

  • 主要弄清容器的迭代器的使用,vector.begin()、vector.end()、vector.rbegin、vector.rend()使用。
    技术图片

源码:

#include <iostream>
#include <vector>
using namespace std;

typedef struct Node{
    int data;
    struct Node *next;
}Node, *LinkedList;

/*****************************************************************************/
/* 函数说明: 创建一个带头结点的单链表                                              */
/* 功能描述: 无                                                                */
/* 返回代码: 带头结点的单链表                                                    */
/* 参数说明: 链表                                                              */
/*****************************************************************************/
LinkedList LinkedListInit(){
    Node *Head, *L, *LNew;
    /* 申请空间 */
    Head = (Node *)malloc(sizeof(Node));
    L = Head;
    L->next = NULL;

    for(int i = 0; i < 10; ++i){
        /* 创建新节点 */
        LNew = (Node *)malloc(sizeof(Node));
        LNew->data = i;               
        L->next = LNew;
        LNew->next = NULL; 
        L = LNew;
    }

    /* 返回头指针 */
    return Head;

}

/*****************************************************************************/
/* 函数说明: 从尾到头打印链表                                                    */
/* 功能描述: 创建两个vector                                                     */
/*           第一个vector用来存储链表中的数据。                                   */
/*           第二个vector用来存储第一个vector的逆打印。                           */
/* 返回代码: 逆序vector                                                        */
/* 参数说明: 链表                                                              */
/*****************************************************************************/
vector<int> printListFromTailToHead(Node *head) {
    vector<int> v1, v2;  

    /* 将链表中的数据存入到v1中 */  
    while(head != NULL){
        v1.push_back(head->data);
        head = head->next; 
    }

    /* 逆序输出v1, 然后存入v2中 */
    for(auto it = v1.rbegin(); it != v1.rend(); ++it){
        v2.push_back(*it);       
    }

    /* 返回v2 */
    return v2;
}

int main(){
    Node *p;
    vector<int> v;
    p = LinkedListInit();     
    p = p->next;    //带头结点单链表
    printListFromTailToHead(p);    
    v = printListFromTailToHead(p);
    for(auto it = v.begin(); it != v.end(); ++it){
        cout << *it << ' ';
    }
    cout << endl;
    return 0;
}

技术图片

从尾到头打印链表

标签:.com   rbegin   ext   inf   ref   link   push   技术   str   

原文地址:https://www.cnblogs.com/komean/p/10701151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!