题目1511:从尾到头打印链表
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:1082
解决:350
题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
输入:
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
输出:
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
样例输入:
1
2
3
4
5
-1
样例输出:
5
4
3
2
1
【代码】
/*********************************
* 日期:2013-10-18
* 作者:SJF0115
* 题号: 九度OJ 题目1511:从尾到头打印链表
* 来源:http://ac.jobdu.com/problem.php?pid=1511
* 结果:AC
* 来源:剑指Offer
* 总结:
**********************************/
#include<iostream>
#include<malloc.h>
#include<stdio.h>
#include<stack>
using namespace std;
typedef struct ListNode{
int value;
struct ListNode *next;
}ListNode;
//从尾到头输出链表
int ListReverse(ListNode *head){
stack<int> stack;
ListNode *p;
p = head->next;
//遍历链表,把每个节点数值添加到栈中
while(p != NULL){
stack.push(p->value);
p = p->next;
}
//输出栈
while(!stack.empty()){
printf("%d\n",stack.top());
stack.pop();
}
return 0;
}
int main()
{
int i,n;
//初始化
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
ListNode *p;
head->next = NULL;
p = head;
while(scanf("%d",&n)!= EOF){
//n = -1一个测试用例的结束
if(n != -1){
//创建链表
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->value = n;
newNode->next = p->next;
p->next = newNode;
p = newNode;
}
//输出
else{
/*p = head->next;
while(p != NULL){
printf("%d\n",p->value);
p = p->next;
}*/
//从尾到头输出
ListReverse(head);
//初始化
head->next = NULL;
p = head;
}
}
return 0;
}
【解析】
代码二
/*---------------------------------------
* 日期:2015-07-20
* 作者:SJF0115
* 题目: 7.从尾到头打印链表
* 结果:AC
* 网址:http://www.nowcoder.com/books/coding-interviews/d0267f7f55b3412ba93bd35cfa8e8035?rp=1
* 来源:剑指Offer
* 博客:
-----------------------------------------*/
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
// 递归实现
helper(head,result);
return result;
}
private:
void helper(ListNode* head,vector<int> &result){
if(head){
if(head->next){
helper(head->next,result);
}//if
result.push_back(head->val);
}//if
}
};
int main(){
Solution s;
ListNode* root = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
root->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
vector<int> result = s.printListFromTailToHead(root);
for(int i = 0;i < result.size();++i){
cout<<result[i]<<endl;
}//for
return 0;
}
代码三
/*---------------------------------------
* 日期:2015-07-20
* 作者:SJF0115
* 题目: 7.从尾到头打印链表
* 结果:AC
* 网址:http://www.nowcoder.com/books/coding-interviews/d0267f7f55b3412ba93bd35cfa8e8035?rp=1
* 来源:剑指Offer
* 博客:
-----------------------------------------*/
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
ListNode* p = head;
while(p){
result.insert(result.begin(),p->val);
p = p->next;
}//while
return result;
}
};
int main(){
Solution s;
ListNode* root = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
root->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
vector<int> result = s.printListFromTailToHead(root);
for(int i = 0;i < result.size();++i){
cout<<result[i]<<endl;
}//for
return 0;
}
分享到:
相关推荐
剑指 Offer 06. 从尾到头打印链表链接:
剑指 Offer 06. 从尾到头打印链表原题链接:剑指 Offer 06. 从尾到头打印链表代码* Definition for singly-linked
剑指 Offer 06. 从尾到头打印链表python(csdn)————程序
剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输出:[2,3,1]辅助栈// 辅助栈s
剑指 Offer 06. 从尾到头打印链表题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。思路:链表只能够由前向后遍历,但是我们要
剑指Offer - 03 - 从尾到头打印链表题目链接题目输入一个链表的头结点,按链表值从尾到头的顺序返回一个ArrayList。递归的写法:public cl
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输出:[2,3,1]限制:0 链表长度 * Definiti
题目来源:牛客网-剑指Offer专题 题目地址:从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 题目解析 方法一: 因为题目要求返回的顺序是从尾到头,所以我们可以采用递归的形式...
5. 从尾到头打印链表 6. 由前序和中序遍历重建二叉树 7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. 斐波那契数列的第n项(青蛙跳台阶) 10. 二进制中1的个数 11. 数值的整数次方 12. 打印1到最大的n位数 ...
1、剑指解析: 2、代码实现: I、辅助栈 from typing import List ###### 代码主体 ###### class Solution: def reversePrint(self, head: ListNode) -> List[int]: stack = [] if head is None: return [] ...
从尾到头打印链表(Python) 题目 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路1 创建一个列表,把链表里的元素从头到尾依次放入列表中,然后反转列表 class Solution: # 返回从尾部到头部的列表值...
面试题 3:从尾到头打印链表(考点: 链表) 2 面试题 4:重建二叉树(考点: 树) 4 面试题 5:用两个栈实现队列(考点: 栈和队列) 5 面试题 6:旋转数组的最小数字(考点:查找和排序) 6 面试题 7:斐波那契数列...
题目描述: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104034942
从尾到头打印链表 时间限制:1秒 空间限制:32768K 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 4. 重建二叉树 时间限制:1秒 空间限制:32768K 输入某二叉树的前序遍历和中序遍历的结果,请重建出该...
3.单链表:从尾到头打印链表 4.二叉树:重建二叉树 5.栈:用两个栈实现队列 6.旋转数组的最小数字 7.斐波那契数列 8.跳台阶 9.变态跳台阶 10.矩形覆盖 11.二进制中1的个数 12.数值的整数次方 13.调整数组顺序使奇数位于...
从尾到头打印链表 重建二叉树 - - leetcode 105 | lintcode 73 用两个栈实现队列 - - leetcode 232 | lintcode 40 旋转数组的最小数字 - - leetcode 153 | lintcode 159 斐波那契数列 - - leetcode 509 | lintcode ...
从尾到头打印链表 7. 重建二叉树(前、中;前、后;中、后) 9.二个栈实现队列 10.1 斐波那契数列 10.2 青蛙跳台阶问题 11. 旋转数组的最小数字 12. 矩阵中的路径 13. 机器人的运动范围 14. 剪绳子 15. 二进制中1的...
leetcode82 链表 leetcode2 两数相加 leetcode82 ...从尾到头打印链表 ##滑动窗口 leetcode3 无重复字符的最长子串 leetcode209 长度最小的子数组 栈 leetcode 225 用队列实现栈 leetcode 232 用栈实现队列
第五题 从尾到头打印链表 测试5 第六题 由前序和中序重建重建二叉树 测试6 第七题 使用两个栈实现队列 测试7 第八题 寻求旋转带宽的最小数字 测试8 第九题 斐波那契数列的第n项(青蛙跳台阶) 测试9 第十题 二进制中...