如何解决没有最后一个节点的LinkedList的实现
我被要求重新实现一个链表而不使用尾部。因此,我必须更改其方法,以使其无需使用尾节点即可工作。
removeLast
方法使我感到困惑:这是我尝试做的,但是并没有删除该节点。
我的尝试怎么了?
public E removeLast()
{
if(isEmpty()) return null;
Node<E> temp=head;
while (temp.getNext()!=null) {
temp=temp.getNext();
}
E a=temp.getData();
temp=null;
size--;
// if(head==temp)
if (head.getNext()==null)
head=null;
return a;
}
测试类
public static void main(String arg[]) {
LinkedListWm<Integer> r = new LinkedListWm<>();
r.addFirst(1);
r.addFirst(3);
r.addFirst(7);
r.addFirst(50);
r.addLast(5);
System.out.println(r.last());
System.out.println(r.first());
r.removeLast();
System.out.println(r.last());
r.removeFirst();
r.display();
}
解决方法
您需要跟踪temp
之前的节点。通过将其next
属性设置为null,您将需要它在上一个节点结束列表。
当前,您尝试使用以下方法做到这一点:
temp = null;
...但是这只是清除变量temp
的内容。它不会更改列表。为此,您必须更改next
属性。
因此,定义一个prev
之后的temp
变量:
Node<E> prev = null;
while (temp.getNext()!=null) {
prev = temp;
temp = temp.getNext();
}
而不是:
temp = null;
做:
prev.next = null;
当然,后者只能在prev
不为null时,换句话说,当head
不是最后一个节点(即temp
)时发生。
所以综合考虑:
public E removeLast()
{
if (isEmpty()) return null;
Node<E> prev = null;
Node<E> temp = head;
while (temp.getNext() != null) {
prev = temp;
temp = temp.getNext();
}
size--;
if (prev == null)
head = null;
else
prev.next = null;
return temp.getData();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。