如何删除java中链表中的唯一节点?

时间:2014-07-01 07:05:26

标签: java linked-list singly-linked-list

我有一个应该运行的while循环,直到从我的链表中删除某个值。(remainingPoints)问题是如果该节点是链表中唯一的节点,我的编译器会给出错误。编辑:我在java中使用预先编写的链表类。

    while (remainingPoints.contains(endPoint)) {

        //loop through each index of the start points adjacency array and update the path estimates.
        for (int i = 0; i < maxIndex; i++) {
            //if the path estimate is greater than the distance found from the next Point to the
            //i'th point, update the pathEstimate for that point and update the parent of the point.
            if ((pathEstimates[i] != 0 && adjMatrix[next][i] != 0) && (adjMatrix[next][i]+pathEstimates[next] < pathEstimates[i])) {
                pathEstimates[i] = adjMatrix[next][i] + pathEstimates[next];
                parents[i] = next;
            }
        }

        //reset next. 
        next = -1;

        //This will be the intersection that has the shortest path from the last tested 
        //intersection (that is not 0).
        for (int i = 0; i < maxIndex; i++) {
            if (pathEstimates[i] != 0 && remainingPoints.contains(i)) {
                if (next == -1)
                    next = i;
                else if (pathEstimates[i] < next)
                    next = i;
            }
        }

        //Inelegent solution goes here in place of the line of code below:
        remainingPoints.remove(next);

    }

我尝试的一个不优雅的解决方案是添加一个if语句,它添加了一个包含-1的无用节点,以便删除包含next的节点,使while循环的下一次迭代为false,但这增加了一个更奇怪的问题:

    if (remainingPoints.size() == 1)
            remainingPoints.add(-1);
    System.out.println(next);
    System.out.println(remainingPoints.remove(next));

通过这种尝试的解决方案,循环无限运行。打印的next的值是1(这是next的正确值和预期值)但不知何故,remainingPoints.remove(next)的值为-1。我也测试了其他值,remainingPoints.remove(next)的值始终是我使用if语句添加的值。这表明remove方法正在删除我添加的值,这将解释无限循环,但为什么会发生这种情况呢?

如果有人能解释如何简单地删除java中链表中的唯一节点,那将非常感谢!!谁也可以解释上述错误的奖金。

顺便说一句,这是我关于堆栈溢出的第一篇文章,所以如果我发布任何帖子错误或者对任何堆栈溢出礼节一无所知,请告诉我!

1 个答案:

答案 0 :(得分:1)

检查head-&gt; next是否为null,如果是,则检查head中的值是否为您要搜索的值,将其删除并返回null或者不执行任何操作

您可以使用以下语法删除它: -

list.remove(0);

考虑到列表是您的LinkedList,我还建议您在列表和集合中阅读Jenkov's tutorials,以帮助您掌握这一点。当我开始使用Java时,他们帮了我很多。我把它们联系起来了。请随时再提出问题,欢迎堆叠溢出!