有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在链表中添加节点

试图在下面的程序中实现single-linked-list,我真的无法理解如何在链表中添加节点(首先,我在空链表上尝试)

简单地说,我试图setDatasetNext但是getSizeofList()每次都返回0。。。。现在对我来说,这真的像是一门火箭科学

问题:有人能告诉我如何实现它吗。。。。或者更确切地说,将一个节点添加到现有的链表中

到目前为止我尝试了什么,以及为什么它们无法奏效:我引用了多个程序,但它们太复杂了,我无法理解(火箭科学),所以根据我从算法中了解的内容,在下面的程序中写道。。。。但即使在algo中,它们也只是展示了如何实现的方法,这就是我失败的地方,因为,我不明白,添加节点需要传递什么data-typevalue


请不要说我不是java人,所以请放轻松,这个问题是为了学习

package Data_S;

public class Linked_List {

    private int data;
    private Linked_List next_ptr;
    private Linked_List headNode = null;

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Linked_List ll = new Linked_List();
        //ll.setnext(25);
        ll.insert_node(24);
        ll.traverse();
        ll.getSizeofList();
    }


    //size of list
    public void getSizeofList()
    {
        int l = 0;
        Linked_List curr = headNode;
        while(curr != null)
        {
            l++;
            curr = curr.getnext();
        }
        System.out.print("Size of list is = "+l);
    }

    //insert node
    public void insert_node(/*Linked_List node, */int data)
    {
        if(headNode == null)
        {
            System.out.println("in insert"); // checking
            this.setnext(headNode);
            this.setData(data);
            System.out.print("value = "+this.getData());
        }
    }

   //set data for this node
    public void setData(int data)
    {
        this.data = data;
    }

    //return the data
    public int getData()
    {
        return this.data;
    }

    //set next pointer
    public void setnext(Linked_List next_ptr)
    {
        this.next_ptr = next_ptr;
    }

    //get next pointer
    public Linked_List getnext()
    {
        return this.next_ptr;
    }


}

共 (1) 个答案

  1. # 1 楼答案

    必须区分链表的单链(节点)和整个容器(LinkedList)

    public class LinkedList {
        Node head;
        int size; // Maybe
    
        public void insertAtEnd(int data) {
            Node previous = null;
            for (Node current = head; current != null; current = current.next) {
                previous = current;
            }
            Node baby = new Node(data);
            if (previous == null) {
                head = baby;
            } else {
                previous.next = baby;
            }
            ++size;
        }
    
        public void insertInSortedList(int data) {
            Node previous = null;
            Node current = null;
            for (current = head; current != null && data < current.data;
                    current = current.next) {
                previous = current;
            }
            Node baby = new Node(data);
            baby.next = current;
            if (previous == null) {
                head = baby;
            } else {
                previous.next = baby;
            }
            ++size;
        }
    }
    
    class Node {
        int data;
        Node next;
        Node(int data) {
            this.data = data;
        }
    }
    

    有时,人们可能会将封装视为:

    public class LinkedList {
        private static class Node {
        }
        ...
    }