我缺少什么来将节点(boxcar(删除到链表的末尾?
public void removeBoxcarFromEnd() {
Boxcar prevcar = head;
Boxcar nextcar = head;
if (head.next == null) {
int result = head.data;
head = null;
return result;
}
else {
while (nextcar.next() > 2)
prevcar = nextcar;
nextcar = nextcar.next();
}
prevcar.setNext(null);
size--;
}
这种方法存在一些问题:
-
你的方法是
void
,而你想返回最后一项的数据? -
while循环既不使用括号(
{}
(也不使用缩进,因此只有prevcar = nextcar
会被执行无限多次。 -
您使用
>2
; -
有一种情况是链接列表也可以为空。
一个可能更好的处理方法:
public String removeBoxcarFromEnd() {
String result;
if(head == null) { //empty list
return null; //or do something else? throw an exception?
} else if (head.next() == null) { //one element, remove it
int result = head.data();
head = null;
}
else { //more elements
Boxcar prevcar = head, nextcar = head.next(), ffcar = nextcar.next();
while (ffcar != null) { //double next iteration
prevcar = nextcar;
nextcar = ffcar;
ffcar = ffcar.next();
}
int result = nextcar.data(); //get result
prevcar.setNext(null); //remove it from the linked list
}
size--;
return result;
}
假设不需要提取数据,只删除最后一个Boxcar
:
public void removeBoxcarFromEnd() {
Boxcar prevcar = head;
Boxcar nextcar = head;
if (head == null || head.next() == null) {
return;
}
while (nextcar.next() != null) {
prevcar = nextcar;
nextcar = nextcar.next();
}
prevcar.setNext(null);
}
首先,我们检查一个null或一个元素列表;在这种情况下,没有什么可做的。
接下来,我们遍历列表,直到到达末尾(即nextCar.next()
返回null(。在每一步中,我们都会保存正在通过的Boxcar
。
当我们退出循环时,prevcar
指向倒数第二辆车,我们可以安全地将其next
变量设置为null
。