2011-04-03 35 views
0

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

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

*它應該返回使用相同的內部維護的指針GETNEXT(), *返回節點的內容()或getPrevious()

並且重置將重置列表,以便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) 
+6

這就是爲什麼他們發明了雙向鏈表。 – 2011-04-03 18:52:21

+0

您可以發佈您的代碼,以便遠嗎? – pajton 2011-04-03 18:54:06

+0

什麼是GET的目的(INTñ )在你的情況? – smas 2011-04-03 19:03:02

回答

7

讓以前的節點的唯一辦法是,直到你找到它的一個節點,從頭部走「下一個」節點是其前一個節點你想找到一個。效率低下,這就是爲什麼雙鏈表往往比單鏈表更受歡迎的原因。 (函數式編程語言中的列表是個例外,它們通常是不可變的......通過記住「頭」列表和新的尾部值,您可以「有效地追加」到不可變的單鏈表中。如果列表已經被雖然雙鏈接)

2

大多數情況下,你可以在Node,在那裏你只需撥打node.getNext().getValue()getNext()(如果你有一個Node兩個領域 - 。Object valueNode next好了,你可以有Node previous,以便您以相反順序遍歷列表(並且您將不得不存儲尾部而不是頭部)

getPrevious()(或getNext())在名單上本身就意味着這個名單有一個迭代的位置,這通常不是這種情況。

0

我猜,你有什麼當前元素具有索引(如果不使用find()方法)的信息,所以基本上你可以撥打:

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

另一種解決方案可以實現,則FindPrevious():它會從頭到目前的節點迭代,並記住前一個節點是什麼,然後返回它

+0

我沒有currentIndex。我需要實現getPrevious和reset() – mysteriousboy 2011-04-03 19:48:37

+0

,所以使用你的find()來找到currentIndex – smas 2011-04-03 19:57:53

+0

但是Objects會是什麼,我該如何跟蹤對象,因爲它應該返回getNext()返回的內容。 – mysteriousboy 2011-04-03 20:32:33

0

是否有可能做到這一點,同時仍然保持單鏈表?是的,但在你做之前,你應該停下來想一想。如果這是爲了一個學校任務或什麼的;那麼這個問題很有可能是修辭性的,並且意味着讓你思考一個鏈表的性質。所以除非你的學校作業(再次 - 我只是假設這是爲了學校)明確地說「爲一個單鏈表實現一個getPrevious方法」我不會這樣做。

鏈表的概念並不特定於Java。它指的是一個普遍接受的定義,如何最好地表示一個數據集合,使得單向迭代(因此名稱爲SINGLY鏈表)速度非常快。換句話說,假設你有一個待辦事項清單;而且你知道你總是會通過你的待辦事項列表來處理你的事情,而你列表中的所有任務都是相互獨立的;所以你永遠不必知道你在路上需要做2或3個任務。在這種情況下,您將使用單個鏈接列表。

這裏的要點是,你可能會問錯誤的問題。而不是問: 「如何獲得單鏈表中的前一個元素」您應該問「鏈表是否真的是最有用的數據結構?「一旦你想過我會建議尋找到一個doubly-linked list作爲@Bart煮布鍋評論。