簡體   English   中英

如何在Java中的單鏈表中實現getPrevious方法

[英]How do I implement getPrevious method in singly linked list in Java

我要實施:

public Object getPrevious(); and reset() method.

*它應該使用SAME內部維護的指針作為getNext()返回,*通過getNext()或getPrevious()返回緊接最后返回的項目之前列表中節點的內容。

然后reset將重置列表,以便getPrevious()和getNext()從頭開始,它的行為就像我們從未調用過這些方法一樣。

在單個鏈接列表中。 我已經實現了:

public int length();
public Object first();
public Object last();
public boolean lookup(Object obj);
public Object get(int n);
public void add(Object o);
public int find(Object obj);
public void delete(Object obj);
public void delete(int n)

到達上一個節點的唯一方法是從頭開始直到找到一個節點,該節點的“下一個”節點是您要查找的上一個節點。 它的效率很低,這就是為什么雙向鏈接列表通常比單鏈接列表更受歡迎的原因。 (例外是功能編程語言中的列表,這些列表通常是不可變的……您可以通過記住“ head”列表和新的tail值來有效地“追加”到不可變的單鏈接列表。這是行不通的如果該列表必須進行雙向鏈接。)

通常,您可以在Node上擁有getNext() ,只需調用node.getNext().getValue() (如果您的Node帶有兩個字段node.getNext().getValue() Object valueNode next ,那么您可以將Node previous ,所以您以相反的順序遍歷列表(並且必須存儲尾部而不是頭部)

列表本身上的getPrevious() (或getNext() )將意味着列表具有迭代位置,通常情況並非如此。

我想您已經了解了當前元素具有索引的信息(如果不使用find()方法),那么基本上可以調用:

public Object getPrevious() {
    Object result = null;
    if (currentNumber > 0) {
        result = get(currentIndex - 1);
    }
    return result;
}

另一個解決方案可以實現findPrevious():它將從頭到當前節點進行迭代,並記住先前的節點是什么,然后將其返回

在保持單個鏈接列表的同時還能做到這一點嗎? 是的,但是您應該停下來仔細考慮。 如果這是用於學校作業或其他事情; 那么這個問題很可能是誇張的,是要讓您考慮鏈接列表的性質。 因此,除非您的學校作業(再次-我只是假設這是給學校的)明確說“為單鏈接列表實現getPrevious方法”,否則我不會這樣做。

鏈表的概念並不特定於Java。 它指的是關於如何最好地表示數據集合的公認定義,以使SINGLE方向迭代(因此稱為SINGLY鏈表)非常快。 換句話說,假設您有一個待辦事項清單; 並且您知道您將始終無所事事地瀏覽待辦事項清單,並且清單上的所有任務都是相互獨立的; 因此您永遠不必知道接下來要做的2或3個任務。 在這種情況下,您將使用一個單鏈表。

這里的重點是您可能會問錯問題。 而不是問; “您應該問“鏈表真的是這里最有用的數據結構嗎?”,“如何獲取單鏈表中的上一個元素”? 一旦您想到了這一點,我建議您按照@Bart Kiers的評論查找雙向鏈接的列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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