-3

我正在学习 java 并尝试实现 Java 'LinkedList' insertList 方法。我希望它以递归方式并按降序工作。我正在关注一本书的教程,但我被困在这一点上。我现在有以下代码,但无法正常工作。任何人都可以给我一些建议吗?

比如说,我们想将 1、3、9、0、5 插入到“LinkedList”中。运行代码后,'LinkedList'中应该是9、5、3、1、0。

public class ListElement {
    int value
    ListElement next;
}

public static ListElement InsertList(ListElement head, ListElement elem) { 

    if(head == null){
        elem.next = head;
        return elem;
    }
    else{
        if(elem.value > head.value){
        elem.next = InsertList(elem, head.next);
    }else{
        elem.next = InsertList(head.next, elem);
    }
        return head;
    }
}
4

2 回答 2

4

您的代码有几个问题。考试

      if(elem.next > head){

不应该编译,因为>没有为对象定义运算符。似乎你的递归没有基本情况——你在所有情况下都递归,这将导致堆栈溢出。最后,应该插入一个值,而不是ListElement. 试试这个(我重命名了方法insertList以符合 Java 编码约定):

public static ListElement insertList(ListElement head, int value) { 
    ListElement elt;
    if (head == null || head.value <= value) {
        elt = new ListElement();
        elt.value = value;
        elt.next = head;
        return elt;
     } else {
        head.next = insertList(head.next, value);
        return head;
     }
}

插入值而不是 a 的优点ListElement是您可以从客户端代码中隐藏列表的实现。此外,由于 aListElement可能是整个列表,因此插入 aListElement可能会出现意外行为。

于 2013-04-10T21:27:17.513 回答
2

首先,这并不是很重要,但是 java 约定强制方法​​以小写字母开头。

其次,也许你想调用 insertList(你自己的函数)而不是 insert,这使得函数递归和合理。

第三,您必须比较值:

if (head == null || elem.value > head.value){
    elem.next = head;
    return elem;
}
else {
    head.next = insertList(head.next, elem);
    return head;
}

这意味着:如果 head 为 null 或小于 elem,则在开头插入 elem;否则,将其插入列表的继续。

于 2013-04-10T21:28:09.777 回答