剑指offer06:从尾到头打印链表

举报
小小谢先生 发表于 2022/04/16 00:51:17 2022/04/16
【摘要】 题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 解题思路: 从尾到头打印链表,优先考虑栈,因为想到栈是先进后出的。如果先反转链表再打印的话会破坏链表原来的结构,不建议。 创建一个栈,用于存储链表的节点Stack<Li...

题目描述:

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 1:

输入:head = [1,3,2]
输出:[2,3,1]

解题思路:

从尾到头打印链表,优先考虑栈,因为想到栈是先进后出的。如果先反转链表再打印的话会破坏链表原来的结构,不建议。

  • 创建一个栈,用于存储链表的节点Stack<ListNode>;
  • 创建一个指针,初始时指向链表的头节点。

当指针指向的元素非空时,重复下列操作:

  • 将指针指向的节点压入栈内
  • 将指针移到当前节点的下一个节点

获得栈的大小 size,创建一个数组 print,其大小为 size

  • 创建下标并初始化 index = 0
  • 重复 size 次下列操作:
  • 从栈内弹出一个节点,将该节点的值存到 print[index]
  • 将 index 的值加 1
  • 返回 print

 

java代码:


  
  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public int[] reversePrint(ListNode head) {
  11. Stack<ListNode> stack=new Stack<>();
  12. ListNode cur=head;
  13. while(cur!=null){
  14. stack.push(cur);
  15. cur=cur.next;
  16. }
  17. int size=stack.size();
  18. int[] array=new int[size];
  19. for(int i=0;i<size;i++){
  20. array[i]=stack.pop().val;
  21. }
  22. return array;
  23. }
  24. }

 

文章来源: blog.csdn.net,作者:小小谢先生,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xiewenrui1996/article/details/112972818

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。