这是宣布变量的类:
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;
}
}
答案 0 :(得分:1)
这就是为什么它是双重链接的:你需要链接到下一个元素和前一个元素。如果我能够完全理解你的问题,别无他法。
答案 1 :(得分:0)
要拥有前一个元素,只需将新的实例变量添加到元素clasS:
私有类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的位置,只需连接到上一个。