首页 > 解决方案 > 如何在没有包装类的情况下修改 LinkedList 的头部?

问题描述

当我创建一个 Node 对象并调用“appendToTail”时,Node 对象通过 next 属性具有一系列节点(如预期的那样)。我尝试创建一个弹出窗口,它获取头部(又名“this”)并用变量引用它并用它的下一个覆盖它。但是,“this”与原来的头像相同。我做错了什么,或者没有办法修改“这个”?

public class Node {
    Node next = null;
    int data;

    public Node(int d) {
        data = d;
    }

    public void appendToTail(int d) {
        Node end = new Node(d);
        Node n = this;
        while (n.next != null) {
            n = n.next;
        }
        n.next = end;
    }

    public void popHead() {
        Node n = this;
        n = n.next;
        
    }
}

标签: javalinked-listsingly-linked-list

解决方案


基本上,您需要构建一个自定义列表并在 End 处添加每个节点。您还需要存储第一个节点才能获得循环的起点。

public class NodeList
{
    Node head=null;
    
    public static void main(String args[])
    {
        NodeList nl = new NodeList();
        nl.addNode(1);
        nl.addNode(2);
        nl.addNode(3);
        nl.listNodes();
    }
    
    public void addNode(int data)
    {
        if(head==null)
        {
            head = new Node(data);
        }
        else
        {
            Node curent = head;
            while(curent.next != null)
            {
                curent = curent.next;       
            }
            curent.next = new Node(data);
        }
    }
    
    public void listNodes()
    {
        if(head !=null)
        {
            Node curent = head;
            System.out.println(curent.data);
            while(curent.next !=null)
            {
                curent = curent.next;
                System.out.println(curent.data);
            }
        }
    }
    
    class Node 
    {
        Node next = null;
        int data;

        public Node(int d) {
            data = d;
        }
    }
}

输出

1
2
3

推荐阅读