Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取双链接列表的上一个元素_Java_List_Sorting - Fatal编程技术网

Java 获取双链接列表的上一个元素

Java 获取双链接列表的上一个元素,java,list,sorting,Java,List,Sorting,下面是声明我的变量的类: private class MyListElement { private final Integer value; private MyListElement nextElement; private MyListElement(final Integer value) { this.value = value; } } 以下是我如何将元素添加到列表中: private void addNewElement() {

下面是声明我的变量的类:

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 placementInList(最终MyListElement新元素){
if(newElement.value
这就是它具有双重链接的原因:您需要一个指向下一个元素和上一个元素的链接。如果我能够准确地理解您的问题,则没有其他方法。

要获得以前的元素,只需向元素类添加一个新的实例变量:

私有类MyListElement{

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

private MyListElement(final Integer value) {
    this.value = value;
}
添加第一个元素时,如下所示:

else {
    firstElement = newElement;
}
您的第一个元素也是最后一个元素(链表由其第一个和最后一个元素定义)。因此,它应该类似于:

firstElement = newElement;
lastElement = firstElement;

最后,在placeElementInList(新元素)中方法,找到新元素的位置后,只需连接到上一个。

在MyListElement类中需要另一个参数private MyListElement prevElement;@Aeshang好的,但它指向什么?这就是我所处的位置。在双链接列表中:first->prev为null,last->next为null。假设您有两个连续的元素p和q,然后p->next是q,q->prev是p。当然,你的上一个元素以及你如何循环下一个元素,你应该能够循环下一个元素…@deandrei,它还应该有一个头和一个尾指针…这是开始和结束元素指针。你能发布你的placeElementInList方法吗?好的,这个e previous元素是您列表中当前的最后一个元素。插入新元素时,您需要能够引用该元素。应用基本OO范例时,这应该是可能的:D@DeiAndrei是的,刚刚在问题中发布。我如何连接?
firstElement = newElement;
lastElement = firstElement;