在已排序的链接列表中添加元素

时间:2013-04-11 03:00:49

标签: java recursion linked-list

我有ListElement个对象的LinkedList,我想创建一个递归方法,该方法添加新节点,同时仍保留列表的排序顺序。

现在我有:

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

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

我用代码多次调用它:

ListElement head = null;
ListElement elem;

// this block of code is repeated multiple times with values of 3, 8, 20, and 15
elem - new ListElement();
elem.value = 6;
head = InsertList( head, elem );

输出如下:

6
6 3
8 6 3
20 8 6 3
15 8 6 3

此输出对于前三行是正确的,但在此之后它们都变得奇怪了。有人可以改进我的算法吗?我觉得InsertList方法可以缩短很多。谢谢!

3 个答案:

答案 0 :(得分:1)

第四个条件块中的head = head.next语句正在销毁head元素。我相信这应该是

else if(head.value >= newelem.value) {
    head.next = InsertList(head.next, newelem);
}

答案 1 :(得分:1)

当您尝试插入15时,您输入第四个条件:

// 20 > 15
else if (head.value >= newelem.value)

反过来调用InsertList但是传递8作为头节点,因此进入第三个条件:

// 8 < 15
else if (head.value < newelem.value) 

在这里,你说

newelem.next = head;

其中设置15 - > next = 8

然后你说,

head = newelem;

设置head = 15.

你看到了问题吗?使用@ Zim-Zam O'Pootertoot答案来修复你的错误。

答案 2 :(得分:0)

感谢所有人的帮助和答案! 我找到了另一个类似于我的帖子,其中一个答案似乎对我有用 以下是希望查看的任何人的链接:https://stackoverflow.com/a/15936744/1470257