从尾到头打印链表
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;
}
以上是关于从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章