获取双链表的前一个元素

时间:2014-09-12 13:38:12

标签: java list sorting

这是宣布变量的类:

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 个答案:

答案 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的位置,只需连接到上一个。