0
点赞
收藏
分享

微信扫一扫

《剑指offer》之从“尾到头打印链表”题解



题目:


https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/


题解:


一说到链表题,我们第一就会想到迭代算法和递归算法,但是看下本题的要求,是从尾到头打印链表,就不需要搞一个新的链表,所以迭代算法可以先pass掉,因此我们优先考虑递归,可以不断寻找链表的Next,直到Next为null,然后不断向上返回值。


图解:


《剑指offer》之从“尾到头打印链表”题解_算法


代码:


链表类:

static class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
}
}

算法:

public class Solution {
/**
* 临时数组
*/
ArrayList<Integer> tmp = new ArrayList<>();

public int[] reversePrint(ListNode head) {
//先进行递归
recur(head);
int[] res = new int[tmp.size()];
//将List的值传给int数组
for (int i = 0; i < res.length; i++) {
res[i] = tmp.get(i);
}
return res;
}

/**
* 递归方法
*
* @param head
*/
public void recur(ListNode head) {
//递归的终止条件
if (head == null) {
return;
}
//进行递归
recur(head.next);
tmp.add(head.val);
}
}

测试:

public static void main(String[] args) {
ListNode listNode = new ListNode(1);
listNode.next = new ListNode(3);
listNode.next.next = new ListNode(2);

Solution solution = new Solution();
int[] ints = solution.reversePrint(listNode);
for (int i : ints) {
System.out.println(i);
}
}



举报

相关推荐

0 条评论