【问题标题】:How can I add a node at the beginning of a doubly linked list in-between two dummy nodes?如何在两个虚拟节点之间的双向链表的开头添加一个节点?
【发布时间】:2015-10-30 01:01:05
【问题描述】:

我正在尝试编写一个函数addFirst(),它接受一个项目并将其插入到双向链表的前面。双向链表有两个虚拟节点,每端一个。到目前为止,我编写的 addFirst() 方法仅在我遍历列表并打印它时返回两个虚拟节点。我无法弄清楚我的代码有什么问题。

public void addFirst(E item) {
        if (item.equals(null)) { throw new NullPointerException(); }

        Node node = new Node(item, null);
        Node ptr = first;

        ptr.next.prev = node;
        node.prev = ptr;
        node.next = ptr.next;

    }

public static void main(String[] args) {

        Deque<Integer> lst = new Deque<Integer>(); // empty list

        lst.addFirst(1);
        lst.addFirst(2);
        lst.addFirst(3);

          Iterator<Integer> it = lst.iterator(); // tests iterator method
            while (it.hasNext()) {
              Integer val = it.next();
              System.out.println(val);
            }    
    }

当我运行 main 时,我得到的只是:

null null

但是,我希望:

null 3 2 1 null

谁能告诉我如何修复我的代码,以便我可以在两个虚拟第一个和最后一个节点之间的双向链表的开头添加一个项目?

【问题讨论】:

    标签: java doubly-linked-list


    【解决方案1】:

    我发现我做错了什么。我只需要通过添加行来完成链

    ptr.next = node;

    所以我的这个方法的完整代码如下所示:

    public void addFirst(E item) {
    if (item.equals(null)) { throw new NullPointerException(); }
    
            Node node = new Node(item, null);
            Node ptr = first;
    
            ptr.next.prev = node;
            node.prev = ptr;
            node.next = ptr.next;
            ptr.next = node;
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多