ooesb 2016-06-02 08:25 采纳率: 100%
浏览 1301
已采纳

单链表递归倒序问题。

public Node reverse(Node first)
{
    if(first == null) return null;
    if(first.next == null) return first;
    Node second = first.next;
    Node rest = reverse(second);
    second.next = first;
    first.next = null;
    return rest;
}

Node rest = reverse(second);这段之后具体是怎么执行的。
每次的rest的值是什么。是不是从链表最后一个往前返回rest值呢。。

感觉很奇怪。下面是鄙人拙计的想法。。
假如是 1→2→3这样的

    Node 2 = 1.next;
    Node rest = reverse(2);    
    2.next = 1;                                
    1.next = null;   
    //由下面的 reverse(2)中rest为3 还是返回3
    return rest;  

reverse(2);


Node 3 = 2.next;
Node rest = reverse(3);
//由3.next==null→ return 3;
2.next = 1;

1.next = null;

return rest; → 3

总感觉我的理解有问题。。

请问下大家是哪里出问题了~~谢谢
  • 写回答

2条回答 默认 最新

  • _1_1_7_ 2016-06-02 09:30
    关注

    写个测试程序验证一下就可以了:

    public class TestLink {

    static final class Node {
    
        final int value;
    
        Node next;
    
        public Node(int value) {
            super();
            this.value = value;
        }
    
        public void next(Node node) {
            this.next = node;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
            String s = String.valueOf(value);
            if (next != null) {
                s += "-->" + next.toString();
            }
            return s;
        }
    
    }
    
    public static void main(String[] args) {
        int size=10;
        Node root = new Node(1);
        Node n = root;
        for (int i = 2; i <= size; i++) {
            Node m = new Node(i);
            n.next = m;
            n = m;
        }
        System.out.println(root);
        System.out.println(reverse(root));
    }
    
    public static Node reverse(Node first) {
        if (first == null)
            return null;
        if (first.next == null)
            return first;
        Node second = first.next;
        Node rest = reverse(second);
        second.next = first;
        first.next = null;
        return rest;
    }
    

    }

    输出结果:
    1-->2-->3-->4-->5-->6-->7-->8-->9-->10
    10-->9-->8-->7-->6-->5-->4-->3-->2-->1
    应该没问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看