替换LinkedList中的节点实际上并没有替换任何内容

时间:2018-01-08 06:25:52

标签: java linked-list doubly-linked-list

我目前正在编写双向链表的实现,并且无法将节点设置为某个值。由于节点中的数据是最终的,我需要替换整个节点,但我为此编写的代码似乎正在工作,直到它退出方法并且原始列表根本没有被更改。这里的代码中是否有任何我遗漏的内容?

`public void set(int index, String item) {
            if (index < 0 || index >= this.size) {
                throw new IndexOutOfBoundsException();
            }
            Node curr = this.front;
            for (int i = 0; i < index; i++) {
                curr = curr.next;
            }
            Node temp = new Node(item);
            temp.prev = curr.prev;
            temp.next = curr.next;
            curr = temp;
        }`

2 个答案:

答案 0 :(得分:1)

您还应该更改“上一个节点的next”和“下一个节点的”prev“。假设prevcur的上一个节点,而nextcur的下一个节点。

Node temp = new Node(item);
temp.prev = prev;
temp.next = next;
next.prev = temp;
prev.next = temp;

你应该处理边缘问题。

答案 1 :(得分:0)

你可以

 System.out.println(curr.val);

并且您发现打印实际上与项目

相同

但是当你回来时,你将找不到任何改变

你只需要找到curr的前节点并设置pre.next = curr(在哪里更改)

`public void set(int index, String item) {
        if (index < 0 || index >= this.size) {
            throw new IndexOutOfBoundsException();
        }
        Node curr = this.front;
        for (int i = 0; i < index; i++) {
            curr = curr.next;
        }
        Node temp = new Node(item);
        temp.prev = curr.prev;
        temp.next = curr.next;
        curr = temp;
        //here you need to set maybe 
         // Node tmp=curr.prev;
         // tmp.next=curr;
    }`