从尾到头打印链表
来源:互联网 发布:艺术网站源码 编辑:程序博客网 时间:2024/05/16 15:57
LeetCode第三题:从尾到头打印链表
LeetCode给的最初代码:
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { }};
法一:把链表的值复制到动态数组里,然后把数组反转顺序输出既可。
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){ } };//head链表无头结点 vector<int> PrintFromTailToHead(ListNode *head){ vector<int> a; ListNode *p = head; //定义一个p指针指向链表,用来遍历链表 while(p != NULL) //遍历链表,把值存入数组c中 { a.push_back(p->val); p = p->next; } reverse(a.begin(),a.end()); //反转数组 return a; }//无头结点的链表的创建 void CreateListNode(ListNode **head){ int n; cout<<"请输入链表的长度:"; scanf("%d",&n); *head = NULL;//head不存储的时候,令他等于NULL,方便后面判断是不是第一个结点 ListNode *tail = *head; //tail永远指向链表尾部 for(int i=0; i<n; i++) { int number; printf("请输入第%d个数字:",i+1); scanf("%d",&number); ListNode *s = new ListNode(number); //判断是不是第一个结点,若是直接赋值 if(tail == NULL) { *head = s; tail = *head; } //不是头结点,直接用尾插法插入 else { tail->next = s; tail = s; } }}int main(){ ListNode *L; CreateListNode(&L); vector<int> result = PrintFromTailToHead(L); //打印vector数组 vector<int>::iterator it; for(it = result.begin(); it != result.end(); it++) { cout << *it << endl; }}
法二:从尾到头输出链表,可看成:“先进去的后输出,后进去的先输出”。和栈“先进后出”完全吻合。所以采用栈来存储链表中的结点值,全部接收完后,在逐个打印既可。
#include <iostream>#include <stack> #include <vector>#include <algorithm>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){ } };//head链表无头结点 stack<int> PrintFromTailToHead(ListNode *head){ stack<int> a; ListNode * tail = head; while(tail!=NULL) { a.push(tail->val); tail = tail->next; } return a;}//创建无头结点的链表 void CreateListNode(ListNode **head){ int n; cout<<"请输入链表的长度:"; scanf("%d",&n); *head = NULL; ListNode *tail = *head; for(int i=0; i<n; i++) { int number; printf("请输入第%d个数字:",i+1); scanf("%d",&number); ListNode *s = new ListNode(number); if(tail == NULL) { *head = s; tail = *head; } else { tail->next = s; tail = s; } }}int main(){ ListNode *L; CreateListNode(&L); stack<int> result = PrintFromTailToHead(L); //栈的打印 while(!result.empty()) { int nodes = result.top(); cout<< nodes <<endl; result.pop(); }}
0 0
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- Abstract methods do not specify a body
- 协同过滤算法
- MSP430定时器的使用
- C语言的图形界面?——简单外挂程序
- caffe的python接口学习(13):调试
- 从尾到头打印链表
- jQuery的ajax方法
- lightoj 1009 - Back to Underworld(二分图染色)
- bin文件转化成hex文件的实现
- Spring中java.lang.NoClassDefFoundError: org/springframework/core/MethodIntrospector
- 统计单词(分割字符串,字符串函数的应用)
- Linux服务器部署Java Web项目笔记
- 利用github webhook 结合openresty自动更新静态博客
- Matlab导出eps或jpg图片的四种方法