在head为null的链表中插入

Sar*_*nKS 6 java nodes singly-linked-list

我有节点类

class Node{
  int data;
  Node next;
}
Run Code Online (Sandbox Code Playgroud)

我必须在列表中插入节点.它工作正常.但总是头值为零.

public void createlist(Node n,int p)
{  
    Node newone = new Node();
    newone.data=p;
    newone.next=null;
    if(n==null)
      n=newone;
    else
    {
        while(temp.next!=null)
         temp=temp.next;
        temp.next=newone;
    }
}
Run Code Online (Sandbox Code Playgroud)

在main函数中我创建了head节点as

 public static void main(String args[] ) {

    Scanner s = new Scanner(System.in);
    Node head=new Node();
    createlist(head,5);
 }
Run Code Online (Sandbox Code Playgroud)

创建此实现后,从头开始的列表看起来像0-> 5.为什么0来了?

das*_*ght 1

零来自head节点本身:

Node head=new Node();
Run Code Online (Sandbox Code Playgroud)

它永远不会被createList方法修改,因此字段中保留默认值零data

归结为无法通过在下面的代码中分配来更改head内部:mainn

if(n==null)
    n=newone;
Run Code Online (Sandbox Code Playgroud)

new Node这就是为什么你被迫在里面创造main,所以事实上n是永远不会的null

您可以通过多种方式解决此问题:

  • 以特殊方式对待头节点- 忽略head打印、删除等操作中的节点,或者
  • 更改对对象进行操作的方法Node以返回修改后的列表- 这将允许您插入新节点或删除头节点,或者
  • 引入一个MyList拥有所有节点的类——将所有列表操作移到“umbrella”类上,并head在那里处理节点。