簡體   English   中英

沒有最后一個節點的 LinkedList 的實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM