Java中的链表结构

我自己用数据结构C语言的语法构建了一个链表结构,采用尾插法,大佬们问一下,为什么一直有空指针错误呀

import java.util.Scanner;

public class lian {
    public String name;
    public int age;
    public lian next;

    public lian create()throws NullPointerException{
        lian h=null;
        lian tail=null;
        lian head=tail= null;
        System.out.println("请输入节点元素,当节点年龄为#时结束");
        Scanner s=new Scanner(System.in);
        String name=s.next();int age=s.nextInt();
        while(name!="#"){
            h=null;
            h.name=name;h.age=age;
            tail.next=h;
            tail=h; }
        return head; }}
    class wish{
        public static void main(String[] args) {
            lian l1=null;
            l1=new lian().create();
    System.out.println("创建后的链表为");
    while(l1!=null){
        System.out.println("姓名为"+l1.name+"年龄为"+ l1.age);
        l1=l1.next;
    }

        }
    }

抛异常是因为 

  public lian create() throws NullPointerException {
    lian h = null;
    lian tail = null;
    lian head = tail = null;
    System.out.println("请输入节点元素,当节点年龄为#时结束");
    Scanner s = new Scanner(System.in);
    String name = s.next();
    int age = s.nextInt();
    while (name != "#") {
      // 你的 h 没有初始化,所以 h.name,就报错了
      h.name = name;
      h.age = age;
      tail.next = h;
      tail = h;
    }
    return head;
  }

 

写循环的意义是什么,本来就只能接收一组数据 第二不看指针复制,你的head还是最初赋值的tail吗

感谢,我理解了,Java是对象语言,不仅仅分配内存就好了,还需要对每个节点对象化;

import java.util.Scanner;

public class lian {
    public link tail,head;
    public int size;

    public void headadd(String name,int age){
        link l=new link(name,age);
        l.next=head;head=l;
        size++;
    }
    public void tailadd(String name,int age){
        if(head==null){
            head=new link(name,age);
            tail=head;
        }
        else{
            link l=new link(name,age);
            tail.next=l;
            tail=l;
        }
    }
    public int getSize(){
        return size;
    }
    public link charAt(int n){
        int i=1;
        while(i<n){
            head=head.next;
            i++;
        }return head;
    }


}

class link{
    String name;int age;link next;
    public link(String name,int age){
        this.name=name;this.age=age;
    }
    public link(){}
    public link(String name,int age,link list ){
        this.name=name;
        this.age=age;
        this.next=next;
    }

}
class try3{
    public static void main(String[] args) {
        lian l=new lian();

        Scanner s=new Scanner(System.in);
        for(int i=0;i<3;i++){
            System.out.println("请输入信息,格式为:姓名+年龄");
            l.tailadd(s.next(),s.nextInt());
    }
        System.out.println(l.charAt(1).name);
        while(l.head!=null){
            System.out.println(l.head.name+"  "+l.head.age);
            l.head=l.head.next;
    }
}}

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632