本文主要是介绍《剑指offer》——从尾到头打印链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
T:
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
这道题,常规方法去做,没有难度。
code:
/*** 先遍历一遍,得到链表的长度,然后定义一个等长的int型数组,* 然后在重新从头遍历数组,将数据存入int[]中,然后逆序添加到Arraylist<Integer>中。* * @param listNode* @return*/public ArrayList<Integer> printListFromTailTohead(ListNode listNode) {ArrayList<Integer> newList = new ArrayList<Integer>();if (listNode == null) {return newList;}int nums = 0;ListNode tempNode = null;tempNode = listNode;while (tempNode != null) {tempNode = tempNode.next;nums ++;}int []arr = new int[nums];tempNode = listNode;int i = 0;while (tempNode != null) {arr[i++] = tempNode.val;tempNode = tempNode.next;}for (int j = arr.length - 1; j > -1; j--) {newList.add(arr[j]);}return newList;}
自己尝试着用递归做了一遍,好久才理清楚关系,并且,我觉得我写的递归,不完善。
code:
private ArrayList<Integer> nList = new ArrayList<Integer>();public ArrayList<Integer> printListFromTailTohead(ListNode listNode) {if (listNode == null) {return nList;}nList.add(this.iteratedMethod(listNode));return nList;}/*** 递归:本递归函数的前提是listNode != null,否则终止条件就会出错。* 函数的功能:返回 参数listNode的val值。* 终止条件:如果本参数是链表的最后一个,那就返回该参数的值。* 主体部分:全局变量先将参数的下一个节点的val值加进去,再返回本参数的val值。* 缺陷:第一次调用本函数是,参数的值时不能加进去的,只能当做返回。* @param listNode* @return*/public Integer iteratedMethod(ListNode listNode) {if (listNode.next == null) {return listNode.val;}nList.add(iteratedMethod(listNode.next));return listNode.val;}
再贴出一下别人的递归代码:
import java.util.ArrayList;import java.util.Stack;public class Solution {public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {ArrayList<Integer> list=new ArrayList<Integer>();ListNode pNode=listNode;if(pNode!=null){if(pNode.next!=null){list=printListFromTailToHead(pNode.next);}list.add(pNode.val);}return list;}}
更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
这篇关于《剑指offer》——从尾到头打印链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!