0

我有一个单链表,我只想删除该列表的最后一个元素。我检查了它,它不起作用。我不知道为什么。

查看我的代码(PS 我想要一个递归解决方案):

// Delete Last Element
public void deleteLast(){

    if(head == null){
        return;
    }

    if(head.next == null){
        head = null;

    }else{
        deleteLast(head.next);
    }
}

private void deleteLast(ListElement head){

    if(head == null){
        return;
    }

    if(head.next == null){
        head = null;
    }else{
        deleteLast(head.next);
    }
}
4

1 回答 1

1

head = null只需将局部head变量设置为null,而不是它所引用的链表中的对象,您需要执行以下操作:

private void deleteLast(ListElement head)
{
    if (head.next.next == null)
        head.next = null;
    else
        deleteLast(head.next);
}

您会注意到我还删除了您的if (head == null)支票,我相信这不是必需的。

编辑:另一种方法:

// returns whether we should delete the passed in parameter
private boolean deleteLast(ListElement head)
{
    if (head.next == null)
        return true;
    else if (deleteLast(head.next))
        head.next = null;
    return false;
}
于 2013-04-06T19:17:02.210 回答