从
我的removeLast方法意味着返回链表中的最后一个元素,然后返回它。这是我目前所看到的:
public int removeLast() {
int x = getLast();
removeLast(first);
return x;
}
private void removeLast(Node n) {
if (n == null) {
throw new ListException("Empty list");
} else {
if (n.next == null) {
n = null;
} else {
removeLast(n.next);
}
}
}
first = LinkedList-class中的实例变量
removeLast()成功返回最后一个数字(getLast()真的做到了,然后removeLast(节点n)应该实际删除它。但是,这部分不起作用
您没有正确设置链表的最后一个节点为null
。正如@Kevin Esche所说,n = null
将n
设置为空,而不是链表的节点。在我的代码中,我使用link
引用来引用节点,并将其设置为null
。
应该可以。
public int removeLast(Node n){ //returns and removes the last node
int x = getLast();
if(n == start && n.link == null) //list has only last node
start = null;
else {
if(n.link.link == null)
n.link = null;
else
x = removeLast(n.link);
}
return x;
}
当从某处调用removeLast()
方法时,传递start
或first
作为参数。
从main()
调用removeLast()
下面是一个从主方法调用removeLast()
方法的例子。
public static void main(String[] args){
LinkedList ll = new LinkedList();
/* add the nodes */
System.out.println("The original LinkedList is");
/* display the LinkedList */
System.out.println("The last node is "+ll.removeLast(ll.start));
System.out.println("After removing the last node, LinkedList is");
/* display the current LinkedList */
}