从尾到头打印链表

Posted komean

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从尾到头打印链表相关的知识,希望对你有一定的参考价值。

解题思路:创建两个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;
}

技术图片

以上是关于从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章

从尾到头打印链表-剑指Offer

从尾到头打印链表

《剑指Offer—— 06. 从尾到头打印链表》代码

从尾到头打印链表

从尾到头打印链表

[编程题] 从尾到头打印链表