当前位置: 首页 > 知识库问答 >
问题:

如何将节点添加到双链接列表的末尾?

牧熙云
2023-03-14

我在课堂上有一个关于Java的作业。它是关于雇员的,所以有三个类,雇员,雇员列表和节点。我需要用这个做一个双链接列表。链表是我们定制的类,而不是Java提供的类。

现在我被困在添加(雇员)方法中。该方法输入参数一个雇员html" target="_blank">对象,并被要求添加到列表的末尾。

这是密码

public void add(Employee emp) {
    Node n = new Node(emp, null , null);
    if(isEmpty() == true) {
        setHead(n);
        setTail(n);
        n.setPrevious(null);
        n.setNext(n);
    }else {
        Node c = getTail();
        c.setNext(n);
        n.setPrevious(c);
        setTail(n);
    }
}

简单地说,当列表为空时,该方法会将员工完美地添加到节点中,即使我将第二个员工添加到列表中,也没有问题;但当我再添加,并尝试检索它时,我最终得到了错误的结果。

基本上,如果列表已填充,则节点c被指定为列表的尾部。“tail或c”next为空,但现在是节点n。节点n,因为是tail之后的下一个元素,所以节点n的上一个链接是节点c,tail更新为节点n。

我在这里做错了什么?如果我尝试

list.getHead().getNext().getNext().getPrevious().getEmployee().getName());

其中list=[a,b,c];结果是c,应该是b。

那就是;

head = a, a.getNext().getNext() == c;
c.getPrevious() == b;

但我仍然和c在一起

代码中有什么错误?请帮忙。高度赞赏

共有1个答案

苏昂雄
2023-03-14

您的add方法没有问题,如下代码所示:

public class Q21114229 {

public static void main(String[] args) {

    DLList<Employee> l = new DLList<Employee>();
    l.add(new Employee("a"));
    l.add(new Employee("b"));
    l.add(new Employee("c"));
    System.out.println("Employee b test: " + l.getHead().getNext().getNext().getPrevious().get().getName());
}

static class Node<T> {

    private Node<T> next;
    private Node<T> previous;
    private T value;
    public Node(T value) { this.value = value; }
    public T get() { return value; }
    public Node<T> getNext() { return next; }
    public void setNext(Node<T> next) { this.next = next; }
    public Node<T> getPrevious() { return previous; }
    public void setPrevious(Node<T> previous) { this.previous = previous; }
}

static class DLList<T> {

    private Node<T> head;
    private Node<T> tail;
    public Node<T> getHead() { return head; }
    public Node<T> getTail() { return tail; }
    public boolean isEmpty() { return (head == null); }

    public void add(T value) {
        Node<T> n = new Node<T>(value);
        if (isEmpty()) {
            head = tail = n;
        } else {
            tail.setNext(n);
            n.setPrevious(tail);
            tail = n;
        }
    }

}

static class Employee {

    private String name;
    public Employee(String name) { this.name = name; }
    public String getName() { return name; }
}

}

输出:

Employee b test: b

其他列表方法之一没有正确更新节点的下一个/上一个变量

 类似资料:
  • 问题内容: 这是我所拥有的: 如何编写代码以在列表末尾添加节点? 所以如果我有 我怎么去 其实…我什至不确定是否要添加到最后。我认为添加然后排序是有效的吗?不确定。 谢谢! 问题答案:

  • 我正在尝试使用时循环将元素添加到双向链表中。节点正在制作中,但它们都存储相同的单词,这是我正在阅读的文件的最后一个单词。这是我的时循环: 在while循环开始之前,光标被初始化为列表的开头。 这是我的节点结构: 我的时循环出了什么问题?为什么它总是覆盖以前的节点?请并谢谢你!

  • 我正在尝试创建一个函数,用于在双链接列表的末尾添加。我无法精确指出为什么它没有打印出任何内容。 当我构建程序时,没有出现错误。 我正在确定。新建节点首先检查头部是否有任何值 在上一个当前指针之后创建 我将前一个节点连接到新节点,新节点指向前一个节点,而新节点指向nullptr作为下一个节点。

  • 我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或

  • 我遇到了一个问题,在这个问题中,您应该交换双链接列表中的一组节点。例如:对于列表