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

时间:2017-09-11 06:10:22

标签: java

我的代码产生奇怪的答案,我无法完全理解。例如,我的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。

1 个答案:

答案 0 :(得分:0)

首先,您没有设置所有引用。要将newNode插入prevNodenextNode之间的双向链接,您需要更改以下参考:

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

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

相关问题