P51、面试题5:从尾到头打印链表】的更多相关文章

面试题 6. 从尾到头打印链表 NowCoder 题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. Java 实现 ListNode Class class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } @Override public String toString() { return val + "->" + next; } } 使用递归 im…
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出. 但是这种情况破坏了链表的结构. 如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据 结构---栈  当我们从前往后遍历链表逐个压栈 然后遍历结束后再 逐个出栈. 首先我们先来用第一种方式实现: #include <iostream> using namespace std; struct ListNode { int data; struct ListNode…
题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值 实现思路 前端工程师看到这个题目,直接想到的就是,写个while循环来遍历链表,在循环中把节点的值存储在数组中,最后在把数组倒序后,遍历数组打印每个值 如果这个题目这么简单,面试官也就不考了 如果面试官提要求说,不许使用数组的任何方法,你会怎么解决? 由于是链表,肯定要遍历.遍历的顺序是从头到尾,可输出的顺序却是从尾到头. 也就是先拿到的数据,最后一个输出.最后拿到的数据,第一个输出.有没有感觉跟栈的定义很像?栈就是“后进先出”,…
题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值 考察 单链表操作.栈.递归等概念. 理解:要实现单链表的输出,那么就须要遍历.遍历的顺序是从头到尾.而节点输出的顺序是从尾到头.因此,先遍历到的节点后输出.这是一个典型的 "后进先出". 要实现这种输出,能够使用栈,或,递归. 通过这道题,让我对 "递归在本质上就是一个栈结构" 理解的更加深刻. 代码例如以下: /*********************************************…
重要思路: 这个问题肯定要遍历链表,遍历链表的顺序是从头到尾,而要输出的顺序却是从尾到头,典型的“后进先出”,可以用栈实现. 注意stl栈的使用,遍历stack的方法. #include <iostream> #include <stack> using namespace std; class Node { public: Node(int v, Node* n) {val = v; next = n;} ~Node(){} int val; Node* next; }; Nod…
题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 思路一:反转数组 代码 时间复杂度:O(n) 空间复杂度:O(1) class Solution { public: vector<int> reversePrint(ListNode* head) { vector<int> res; if (!head) return res;…
问题描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class So…
问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值. 首先定义链表结点 public class ListNode { int val; ListNode next = null; ListNode(int val){ this.val = val; } } 思路1:此题明显想到是利用栈的思想,后进先出,先遍历链表,依次将结点值进栈.最后在遍历栈出栈. public static Stack<Integer> printListReverse_Stack(ListNode li…
书中方法一:反转应该立刻想到栈,利用一个栈完成链表的反转打印,但是用了额外的O(n)空间. public void printFromTail(ListNode first){ Stack<ListNode> stack = new Stack<ListNode>(); while(first != null){ stack.push(first); first = first.next; } while(!stack.isEmpty()){ System.out.print(st…
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 链表结点定义如下: Struct ListNode{ int   m_nKey; ListNode*   m_pNext; }; 我们可以用栈来实现“后进先出”的顺序.每经过一个结点的时候,把该结点防到一个栈中.当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了. void PrintListReversingly_Iteratively(ListNode* pHead){ std::stack<L…