這裏的類聲明我的變量:獲取雙鏈表的前一個元素
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;
}
}
您需要另一個參數private MyListElement prevElement;在MyListElement類中。 – StackFlowed 2014-09-12 13:40:40
@Aeshang好吧,但它指向什麼?這就是我堅持的地方。 – user3816423 2014-09-12 13:42:18
在雙鏈表中:first-> prev爲null,last-> next爲null。假設你有兩個連續的元素p和q,那麼p-> next是q,q-> prev是p。 。 – DeiAndrei 2014-09-12 13:43:00