首页 > 解决方案 > 末端的双重 LL 插入卡在循环上

问题描述

我似乎无法弄清楚为什么在双向链表末尾插入一个节点会陷入循环。它要么陷入循环,要么陷入空指针。另外我想知道在处理链表或任何数据结构时公共节点是否更好或公共无效。

public Node insertEnd(int data) {
    Node newNode = new Node(data);
    newNode.next = null;
    if (head == null) {
        head = newNode;
        return newNode;
    }

    Node last = head;
    while(last!=null) {
        last = last.next;
        last.next = newNode;
    }
    newNode.previous = last;
    return newNode;
}

标签: javadata-structures

解决方案


嗯,就是因为这部分逻辑

    Node last = head;
    while(last!=null) {
        last = last.next;
        last.next = newNode; //// This shouldn't happen.
    }

一旦已经创建了链接列表,您将尝试转到最后一个元素。但是,在遍历期间,您还更改了节点指向的下一个指针。

尝试将您的逻辑更改为:

public Node insertEnd(int data) {
    Node newNode = new Node(data);
    newNode.next = null;
    if (head == null) {
        head = newNode;
        return newNode;
    }

    Node last = head;
    while(last.next != null) {
        last = last.next;
    }
    last.next = newNode;
    newNode.previous = last;
    return newNode;
}

推荐阅读