本文主要是介绍大厂常见算法50题-图书整理(从头到尾打印链表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法!
文章目录
- 题目
- 解法一 递归 + 辅助栈
- 解法二 辅助栈
- 总结
题目
题目地址
解法一 递归 + 辅助栈
- 根据头节点(对象)的next节点属性可以得到所有的节点
- 通过递归将数据都放到辅助栈中,递归出口是节点为null
- 初始化一个int[]数组,将栈中的元素弹出并放入数组
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
class Solution {// 声明一个栈static Stack<ListNode> stack = new Stack<ListNode>();public int[] reversePrint(ListNode head) {// 将数据压如栈中recurrence(head);int size = stack.size();System.out.println(size);// 声明返回的数组int[] result = new int[size];// 遍历栈,弹出for (int i = 0; i < size; i++) {result[i] = stack.pop().val;}return result;}public static void recurrence(ListNode node){if(node != null){stack.push(node);recurrence(node.next);}}
}
解法二 辅助栈
- 根据头节点(对象)的next节点属性可以得到所有的节点
- 将节点中所有的值放入辅助栈中(栈先进后出)
- 初始化一个int[]数组,将栈中的元素弹出并放入数组
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {// 声明一个栈Stack<ListNode> stack = new Stack<ListNode>();// 将数据压如栈中ListNode temp = head;while (temp != null) {stack.push(temp);temp = temp.next;}int size = stack.size();// 声明返回的数组int[] result = new int[size];// 遍历栈,弹出for (int i = 0; i < size; i++) {result[i] = stack.pop().val;}return result;}
}
总结
这道题作为链表类型的入门题目是非常适合的,推荐没刷过算法的,链表从这道题开始。新手需要注意的是这里的Node是个对象,对象里有一个Node属性代表的是它的下一个节点,实在理解不了的你就把入参看成一个链表。
这篇关于大厂常见算法50题-图书整理(从头到尾打印链表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!