繁体   English   中英

为什么在插入时重复我的双向链表?

[英]Why is my doubly-linked list repeating on insertion?

我的代码生成了我无法完全理解的奇怪答案。 例如,我的insert方法似乎只是重复我进行的第一次插入,而无视列表的大小以及在列表之后进行的所有插入调用。

public class LinkedListImpl implements LIST_Interface {
        Node sentinel; 
        private int numElts;


public LinkedListImpl(){
        sentinel=new Node(0);
        numElts = 0;
    }

public boolean insert(double elt, int index) {
    Node temp = new Node(elt);
    Node currentNode;
    int x;

    if(index > size()) {
        return false;
    }   
    else  if(index == 0){
        currentNode = sentinel;
        if(size() == 0) {
            currentNode.prev = temp;
            temp.next = sentinel;
        }
        currentNode.next = temp;
        temp.prev = currentNode;

        numElts++;
        return true;
    }
    else {
        currentNode = sentinel;
        for(x = 0; x < index; x++) {
            currentNode = currentNode.next;
        }
        temp = currentNode;
        currentNode.prev = temp;
        temp.next = currentNode;

        numElts++;
        return true;
    }
}

public double get(int index) {
    Node currentNode;
    int x;

    if(numElts == 0) {
        return Double.NaN;
    }
    else {
        currentNode = sentinel;
        for(x = 0; x < index; x++) {
            currentNode = currentNode.next;
        }
        return currentNode.getData();
    }
}
}
public int size() {
        return numElts;
    }

这段代码在这里:

LinkedListImpl L= new LinkedListImpl();
L.insert(45.0,  0);
L.insert(13.0, 1);
L.insert(89, 2);
System.out.println("Size of the list: " + L.size());
System.out.println(L.get(0));
System.out.println(L.get(1));
System.out.println(L.get(2));
System.out.println(L.get(3));

返回值:

Size of the list: 3
0.0
45.0
45.0

我不明白为什么45.0不是L.get(0)的第一个条目

我也不明白为什么它会一遍又一遍地复制45.0。 如果我使用for循环将L.get(x)打印为0 <= x <= 10 ,则从x = 2x = 10仍将重复45.0。

一方面,您没有设置所有引用。 要将newNode插入prevNodenextNode之间的双向链接中,您需要更改以下引用:

prevNode.next
newNode.prev
newNode.next
nextNode.prev

您的代码仅设置其中的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM