2014-09-12 51 views
-1

這裏的類聲明我的變量:獲取雙鏈表的前一個元素

private class MyListElement { 

    private final Integer value; 
    private MyListElement nextElement; 

    private MyListElement(final Integer value) { 
     this.value = value; 
    } 
} 

以下是我一個元素添加到我的列表:

private void addNewElement() { 
    System.out.print("Please type the number to be added to the list: "); 

    Integer newValue = null; 
    while (newValue == null) { 
     try { 
      newValue = Integer.parseInt(userInput.nextLine()); 
     } catch (final Exception e) { 
      System.out.println("Wrong value. Please insert new value."); 
     } 
    } 

    MyListElement newElement = new MyListElement(newValue); 

    if (firstElement != null) { 
     placeElementInList(newElement); 
    } else { 
     firstElement = newElement; 
    } 
} 

最後,問題:一是,我聲明一個變量來包含列表中的最後一個元素;沒關係。但我怎麼能得到它的前一個元素循環列表並反向打印?

private void printInReverse() { 
    MyListElement tmpElement = firstElement; 
    while (tmpElement.nextElement != null) { 
     tmpElement = tmpElement.nextElement; 
    } 

    MyListElement firstReverseElement = tmpElement; 

    MyListElement elementInList = firstReverseElement; 
    while (elementInList != null) { 
     System.out.print(elementInList.value + ", "); 
     elementInList = elementInList.nextElement; 
    } 
    System.out.println(""); 

} 

「元素」是假設的指向列表中的值的指針。

編輯: 這是我如何排序列表(升序)。

private void placeElementInList(final MyListElement newElement) { 
    if (newElement.value < firstElement.value) { 
     newElement.nextElement = firstElement; 
     firstElement = newElement; 
    } else { 
     MyListElement previousElement = firstElement; 
     MyListElement elementInList = firstElement.nextElement; 
     while (elementInList != null) { 
      if (newElement.value < elementInList.value) { 
       break; 
      } 
      previousElement = elementInList; 
      elementInList = elementInList.nextElement; 
     } 
     previousElement.nextElement = newElement; 
     newElement.nextElement = elementInList; 
    } 
} 
+2

您需要另一個參數private MyListElement prevElement;在MyListElement類中。 – StackFlowed 2014-09-12 13:40:40

+0

@Aeshang好吧,但它指向什麼?這就是我堅持的地方。 – user3816423 2014-09-12 13:42:18

+2

在雙鏈表中:first-> prev爲null,last-> next爲null。假設你有兩個連續的元素p和q,那麼p-> next是q,q-> prev是p。 。 – DeiAndrei 2014-09-12 13:43:00

回答

1

這就是爲什麼它是雙重鏈接:您需要一個鏈接到下一個以及以前的元素。沒有其他的方法,如果我設法正確地理解你的問題。

+0

好吧,但我沒有設法得到這些以前的值。 – user3816423 2014-09-12 13:57:17

+0

你可以發佈你的placeElementInList方法嗎? – DeiAndrei 2014-09-12 13:59:35

+0

好吧,前一個元素是你列表當前的最後一個元素。您需要能夠在插入新元素時參考。這應該可以應用基本的OO範例:D – 2014-09-12 14:10:12

0

爲了有一個前一個元素,只是一個新的實例變量添加到元素類:

私有類MyListElement {

private final Integer value; 
private MyListElement nextElement; 
private MyListElement prevElement; 

private MyListElement(final Integer value) { 
    this.value = value; 
} 

當您添加的第一個元素,它是在這裏:

else { 
    firstElement = newElement; 
} 

您的第一個元素也是最後一個元素(鏈接列表由其第一個AND最後一個元素定義)。因此,它應該是這樣的:

firstElement = newElement; 
lastElement = firstElement; 

最後,在您的placeElementInList(newElement);方法,一旦你找到了newElement的地方,只要建立一個連接到前一個。

+0

我怎麼能做這個連接? – user3816423 2014-09-12 14:47:49