题目

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

示例

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

代码

解法

public int[] reversePrint(ListNode head) {
    ListNode node = head;
    int count = 0;
    while (node != null) {
        ++count;
        node = node.next;
    }
    int[] nums = new int[count];
    node = head;
    for (int i = count - 1; i >= 0; --i) {
        nums[i] = node.val;
        node = node.next;
    }
    return nums;
}

代码分析:代码不算难,用迭代效率肯定是没问题的,下面再介绍另一种花里胡哨的写法。

  • 其他优秀代码

解法:DFS

class Solution {
    List<Integer> list = new ArrayList<>();
    public int[] reversePrint(ListNode head) {
        dfs(head);
        int[] ans = new int[list.size()];
        for(int i = 0; i < ans.length; i++) {
            ans[i] = list.get(i);
        }
        return ans;
    }
    public void dfs(ListNode node) {
        if (node == null) {
            return;
        }
        dfs(node.next);
        list.add(node.val);
    }
}

代码分析:1、通过dfs(ListNode node)将链表中的元素逆序添加到list中,注意写法:

public void dfs(ListNode node) {
     if (node == null) {
          return;
     }
     dfs(node.next);
     list.add(node.val);
}

代码list.add(node.val);是在dfs(node.next);之后的,实现逆序添加。

题目cong-wei-dao-tou-da-yin-lian-biao-lcof

最后修改:2022 年 01 月 09 日 12 : 40 PM
如果我的文章对你有用,请随意赞赏