首页 > 编程 > Java > 正文

Java版数据结构插入数据时遇到的结点为空的问题详解

2019-11-26 08:36:24
字体:
来源:转载
供稿:网友

在演示Java版数据结构与算法教材中的头插法代码时遇到了空结点问题 。 先上代码。

链表类

import java.util.Scanner; public class ListLinked<T> {   ListLinkedNode<Integer> head=new ListLinkedNode<Integer>();//声明头结点  //添加结点  public void addFromHead(int e){    ListLinkedNode<Integer> p=new ListLinkedNode<Integer>();//声明并创建结点p为插入结点    p.setData(e);    p.setNext(head.getNext());    head.setNext(p);//将p插入到头结点后  }  //头插法创建链表  public static ListLinked<Integer> createFromHead() {    ListLinked<Integer> listLinked=new ListLinked<>();//初始化链表    System.out.println("-头插法建立链表-");    System.out.println("请输入链表长度:");    Scanner sc=new Scanner(System.in);    //n : 链表长度    int n=sc.nextInt();    System.out.println("请输入值:");    for(int i=0;i<n;i++) {      System.out.print("请输入第"+(i+1)+"个值:");      int e=sc.nextInt();      listLinked.addFromHead(e);    }    System.out.println("链表创建完毕");    return listLinked;  }  //输出  public void display() {    System.out.println("{");    ListLinkedNode<Integer> p=new ListLinkedNode<Integer>();    p=head.getNext();    while(p!=null) {      int value=p.getData();      System.out.println(value);      p=p.getNext();    }    System.out.println("}");  }}

节点类

public class ListLinkedNode<T>{  //数据成员  private T data;  private ListLinkedNode<T> next;  //获得数据域  public T getData() {    return data;  }  //设置数据域  public void setData(T data) {    this.data=data;  }  //得到指针域  public ListLinkedNode<T> getNext(){    return next;  }  //设置指针域  public void setNext(ListLinkedNode<T> next) {    this.next=next;  }  //有参构造函数  public ListLinkedNode(T data) {    this.data=data;    this.next=null;  }  //无参构造函数  public ListLinkedNode() {      }}

测试类

public class test {  public static void main(String[] args) {    ListLinked list=new ListLinked();    list.createFromHead();    list.display();  }}

测试,在判断p是否为空执行输出的时候,p一直为null。 

打断点调试的时候发现了问题所在。

因为java把引用类型当作了指针,所以在addFromHead方法里,head里的next存的是p对象的地址。

当出了addFromHead方法,局部变量p的生命周期结束被垃圾回收机制带走

栈中没有变量再指向之前在堆中的p对象,所以堆中的对象也被当作了垃圾被带走,head的next又变成了null

 

以上就是Java版数据结构插入数据时遇到的结点为空的问题的全部内容,感谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表