链表中的节点类专门用于构造函数,并使用它来创建随机整数的链表

时间:2018-11-17 17:35:47

标签: java linked-list nodes computer-science

我的节点构造函数如下:

 public Node(int ndata, Node nlink)
         {
             this.data=ndata; 
             this.link = nlink; 
         }

此构造函数采用两个参数,即节点的数据和到下一个节点的链接。对于我所看到的构成链表的所有内容,都会这样创建一个新节点:

Node nextNode =新节点(数据);

但是,由于某种原因我没有将第二个参数放入程序,则无法运行该程序。这是我的代码。

public static Node ListGenerator()
{
    // Generate RANDOM List
    int j, cint, size;
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter the size"); 
    size = input.nextInt(); 
    //Node head; 
    Node current = null; 
    for (j = 1; j <= size; j++) {

        cint = (int)((Math.random() * 100)+1); 
        Node nextNode = new Node (cint,current.getLink()); 
        current = nextNode; 

    } return current;     

    // ...  
}

我是链表的新手,所以这对我来说很困惑,即使这可能是我没有得到的非常简单的东西。

1 个答案:

答案 0 :(得分:1)

您的代码中有几点需要考虑:

  1. head外,您还需要一个current变量才能最终返回到调用方(此注释已被注释掉,所以您在正确的位置上)。

  2. 您对current.getLink()的第一次呼叫将崩溃,因为current的开头为null

  3. 此构造函数对于Node是正常的。您可以将null传递给第二个参数作为下一个节点的临时占位符,前提是您可以使用setter以便以后使用。您可能希望重载构造函数以支持link作为可选参数,但是如果您无权编辑类,则不必这样做。

  4. Scanner内添加ListGenerator不必要地将其用法仅限于用户输入。此I / O逻辑最好放在您的main方法中(或任何调用范围)中。沿着这些思路,进一步考虑将节点值的数组传入并从该方法中移出随机数生成,从而进一步提高模块性/可重用性。

  5. Java中的方法名称应小写驼峰。

  6. int j, cint, size;这样的方法顶部的ANSI C样式变量声明通常在Java中不使用;最好在循环范围内声明索引变量。

这是一种从列表末尾开始并使用指向head和紧随其后的节点next的指针前进的方法,null在第一个指针上迭代:

class Node {
    public int data;
    public Node link;

    public Node(int data, Node link) {
        this.data = data; 
        this.link = link; 
    }
}

class Main {
    public static Node listGenerator(int size) {
        Node next = null;
        Node head = null;

        for (int i = 1; i < size; i++) {
            head = new Node((int)(Math.random() * 100) + 1, next);
            next = head;
            head = null;
        }

        head = new Node((int)(Math.random() * 100) + 1, next);
        return head;     
    }

    public static void main(String[] args) {
        Node head = listGenerator(6);

        while (head != null) {
            System.out.print(head.data + "->");
            head = head.link;
        }

        System.out.println("null");
    }
}

输出:

13->33->87->82->35->87->null

Try it!