我自己用数据结构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