zoukankan      html  css  js  c++  java
  • 从尾到头打印链表

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

  • 相关阅读:
    SqlMapClient对象
    斐波拉契数列的由来
    马士兵struts2
    [转]ASP.NET Repeater控件
    C# 使用委托
    C# 实现图片的放大缩小和平移
    托管改变属性的值InvokeRequired
    [转]正确使用 RamDisk Plus 的方法解决分配内存后占用系统内存的问题
    简单学习Infopath
    C# Image与ByteArray转换
  • 原文地址:https://www.cnblogs.com/komean/p/10701151.html
Copyright © 2011-2022 走看看