剑指offer系列源码-从尾到头打印链表

ob地址

题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
输入:
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
输出:
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
样例输入:
1
2
3
4
5
-1
样例输出:
5
4
3
2
1
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;

struct ListNode{
    int value;
    ListNode * next;
};

void reversePrint(ListNode * pHead){
    if(pHead==NULL){
        return;
    }
    std::stack<ListNode*> nodes;

    while(pHead!=NULL){
        nodes.push(pHead);
        pHead = pHead->next;
    }
    while(!nodes.empty()){
        ListNode* top = nodes.top();
        printf("%d\n",top->value);
        nodes.pop();
    }
}

int main(){
    int value;
    ListNode * pHead =NULL;int i=0;
    ListNode* pCur = pHead;
    while(scanf("%d",&value)&&value!=-1){
        //addToTail(pHead,n);
        ListNode* pNew = new ListNode();
        pNew->value = value;
        pNew->next = NULL;
        if(i==0){
            pHead = pNew;
            pCur = pHead;
        }else{
            pCur->next = pNew;
            pCur = pCur->next;
        }
        i++;
    }
    reversePrint(pHead);
    return 0;
}
时间: 2024-08-07 20:59:02

剑指offer系列源码-从尾到头打印链表的相关文章

【剑指offer】Q5:从尾到头打印链表

可以练习下链表的逆置. def PrintListReversingly(head): if head == None: return if head: PrintListReversingly(head.next) print head.val def reverse(head): if head == None or head.next == None: return head psuhead = ListNode(-1) while head: nexthead = head.next h

剑指offer第三题 从尾到头打印链表

输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解题思路:先入栈相当于链表逆序再出栈实现链表从尾到头的顺序输出. 1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.*; 13 public class So

剑指offer(3)从尾到头打印链表

题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题代码: /*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { // write code here var arr = []; if(head == null){ return arr; } while(head != null){ arr.push(head.val)

【剑指offer】替换空格从尾到头打印链表

题目链接 [题目描述] 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. [解题思路] 将链表的元素压入栈中(因为栈是先进后出的),然后再把栈中的元素放入vector即实现了倒序. [代码] 1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : 6 * val(x), next(NULL) { 7 * } 8 * }; 9 */ 10 class Solu

剑指offer 面试题6.从尾到头打印链表

0.题目描述 输入一个链表的头结点,从尾到头反过来打印出每个节点的值. 1.解法 用栈即可. ? ? class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { stack<ListNode*> step; vector<int> ans; ListNode* p = head; while(p){ step.push(p); p = p -> next; } whi

剑指Offers 题目1511:从尾到头打印链表

题目1511:从尾到头打印链表 题解报告:方法一.链表创建,头插法,方法二.运用栈,注意栈可能溢出~! #include <iostream> #include <stack> #include <cstdio> using namespace std; // stack int main() { int num; stack<int> List; while(scanf("%d", &num) && num !=

剑指Offer_编程题_从尾到头打印链表

题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 创建链表相关,头插法和尾插法 关于头插法,可以next可以理解成前一个节点地址,插入顺序: 1.头节点传入,开始创建A数据,头节点的next指向A数据的内存地址,A节点的next替换成头节点的 2.头节点再传入,创建B数据,头节点的next又换成了指向B的内存地址,B节点的next替换头节点的A: 总结一下:插入时候,一直在头节点的上面插入数据,原来的数据被“顶”上去了: 头插法遍历的时候,头节点开始,一个一个往上遍历.这

剑指offer系列源码-二叉树中和为某一值的路径

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. #include <iostream> #include<stdio.h> #include<vector> using namespace std; struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right; }; //递归判断路劲

剑指offer系列源码-二叉树的镜像

输入一个二叉树,输出其镜像. 解法:交换所有非叶子结点的左右结点. #include<stdio.h> #include<iostream> using namespace std; struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right; }; //树的镜像 void reseverBinaryTree(BinaryTreeNode* root){ if(root==NULL||(