【问题标题】:Recursive function to add a node at the end of a linked list在链表末尾添加节点的递归函数
【发布时间】:2018-07-04 10:59:44
【问题描述】:

下面是我编写的一个递归函数,用于在链表的末尾添加一个节点。谁能告诉这个功能是否正确?

Node insertAtEnd(Node head, int data){  
     if(head.next == null){  
             Node temp= new Node(data);        
             head.next= temp;  
             return;  
        }  
 insertAtEnd(head.next, data);  
}

已经有一个名为Node的类,其定义如下:

class Node
    {
        int data;
        Node next;
        Node(int d) {data = d; next = null; }
    }

【问题讨论】:

  • 何不运行看看
  • 递归是描述一些上下文的好概念,然后是设计算法 - 但不是在这里。尝试像人一样说不自然的语言:这里没有什么是递归的
  • 提示:数据结构编程的一个基本部分是测试实现。理想情况下,您甚至编写生产代码之前编写测试用例......认真:要求其他人审查您的代码应该像你做的最后件事......在那之前,您自己做了很多事情来回答这个问题。 (询问是可以的,但这个社区并不适合此类问题)。如前所述:你想学习这些东西。测试应该是您学习活动的基本部分!
  • 老实说:上面甚至不应该编译。你可以有一个 return 语句而不给出值,但是你的方法签名说返回一个 Node 实例。抱歉,朋友,但在考虑将代码放在这里进行“审查”之前 - 确保它至少可以编译。
  • 我投票结束这个问题,因为 Stack Overflow 既不是测试也不是代码审查服务。

标签: java algorithm recursion linked-list


【解决方案1】:

你的方法有一个Node返回类型,所以你应该返回新的Node

Node insertAtEnd(Node head, int data) {  
    if (head.next == null) {  
        Node temp= new Node(data);        
        head.next= temp;  
        return temp;  
    }  
    return insertAtEnd(head.next, data);  
}

Node insertAtEnd(Node head, int data) {  
    if (head.next == null) { 
        head.next = new Node(data);
        return head.next;  
    }  
    return insertAtEnd(head.next, data);  
}

【讨论】:

  • @SambeetMandal 如果我认为我的答案不正确,我就不会发布它。当然,如果我是你,我会运行代码以确保它正常工作。
  • 感谢您的回复。
  • 我还想补充一点,你为什么在 if 语句中返回 temp ?我认为设置链接应该没问题。如果我错了,请纠正我。
  • @SambeetMandal 您是提出该方法签名的人。 决定 insert 方法返回一些 Node 实例。 Eran 只是试图理解这一点。
  • 老实说,OP 的最后一条评论是我决定否决并关闭请求该问题的原因。因为他不是在寻找答案,所以他正在寻找一位辅导他的家庭作业细节......
猜你喜欢
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
相关资源
最近更新 更多