[英]implementation of LinkedList without last node
我被要求在不使用尾部的情況下重新實現一個鏈表。 所以我必須改變它的方法,這樣它就可以在不使用尾節點的情況下工作。
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
屬性。
因此,定義一個將在temp
之后跟隨的prev
變量:
Node<E> prev = null;
while (temp.getNext()!=null) {
prev = temp;
temp = temp.getNext();
}
而不是:
temp = null;
做:
prev.next = null;
當然,后者只能在prev
不為空時發生,或者換句話說,當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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.