2013-04-06 92 views
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); 
    } 
} 
+0

语言? Java的? – Dukeling 2013-04-06 19:16:08

回答

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; 
} 
+0

天哪,它的作品xD ...真棒!多谢。但是如果没有next.next,没有办法做到这一点吗?我不喜欢它的外观:P – user2252902 2013-04-06 19:42:39

+0

@ user2252902请参阅编辑。 – Dukeling 2013-04-06 19:54:49

+0

哦,我喜欢第二种方式,非常感谢你;-) – user2252902 2013-04-06 20:36:52

相关问题