You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:链表元素逆序输出问题排查(HackerRank刷题)

问题排查与修正方案

嘿,我一眼就看出你代码里的问题啦!你的核心错误是把链表元素逆序输出和元素降序排序输出搞混了,这完全是两个不同的需求哦。

问题分析

你当前的代码里,用了Collections.sort(intList, Collections.reverseOrder())这个操作——它会把列表里的元素按从大到小的顺序重新排列,而不是按照原链表的顺序反过来输出。举个例子:

  • 如果原链表是 1 -> 3 -> 2
  • 你的代码会输出 3、2、1(排序后的降序)
  • 但题目要求的逆序输出应该是 2、3、1(原链表的倒序)

这就是你的解法无法通过测试的原因!

修正方案

这里给你三种简单的修正思路,任选其一都可以解决问题:

方案1:反向遍历存储的列表(最贴近你的原代码)

只需要去掉排序的代码,改成从列表的末尾往前遍历输出即可:

static void reversePrint(SinglyLinkedListNode head) { 
    if (head == null){ 
        return; 
    } 
    ArrayList<Integer> intList = new ArrayList<>(); 
    while(head != null){ 
        intList.add(head.data); 
        head = head.next; 
    }
    // 去掉排序,改成反向遍历
    for(int i = intList.size() - 1; i >= 0; i--) {
        System.out.println(intList.get(i));
    } 
}

方案2:用栈实现(更符合链表逆序的逻辑)

利用栈“后进先出”的特性,遍历链表时把元素压入栈,再依次弹出输出:

static void reversePrint(SinglyLinkedListNode head) {
    if (head == null) {
        return;
    }
    Stack<Integer> stack = new Stack<>();
    while(head != null) {
        stack.push(head.data);
        head = head.next;
    }
    while(!stack.isEmpty()) {
        System.out.println(stack.pop());
    }
}

方案3:递归实现(代码最简洁)

借助递归调用的栈帧,先递归到链表末尾,再回溯输出当前节点的元素:

static void reversePrint(SinglyLinkedListNode head) {
    if (head == null) {
        return;
    }
    // 先递归处理下一个节点
    reversePrint(head.next);
    // 回溯时输出当前节点的数据
    System.out.println(head.data);
}

总结

只要把错误的排序操作替换成真正的“逆序输出”逻辑,你的代码就能通过测试啦~

内容的提问来源于stack exchange,提问作者Nathanael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:42:55