shaokel 2019-12-11 12:32 采纳率: 95.2%
浏览 349
已采纳

请求大佬支援!!!单链表报空指针异常

图片说明

add方法报空指针异常

package exercise.LinearTable.impl;

import exercise.LinearTable.LinearList;

public class SingleList{

    Node head = null;//表头

    public boolean isEmpty() {
        int length = size();
        if(length==0) {
            return true;
        }
        return false;
    }

    public int size() {
        int length = 0;
        Node temp = head;
        while(temp.next!=null) {
            length++;
            temp = temp.next;
        }
        return length;
    }

    public Object get(int index) {
        Node temp = head;
        int i = 1;

        if(index == 0) {
            return head;
        }

        while(temp.next!=null) {
            if(index==i) {
                return temp;
            }
            temp = temp.next;
            i++;
        }

        return temp;
    }

    public int add(Object element) {
        int i=0;

        if(head.next==null) {
            head.next = (Node) element; 
            return i;
        }

        //新建一个节点
        Node newnode = new Node(element);

        Node temp = head;    //一个移动的指针(把头结点看做一个指向结点的指针)
        while(temp.next != null){    //遍历单链表,直到遍历到最后一个则跳出循环。
            temp = temp.next;        //往后移一个结点,指向下一个结点。
        }
        temp.next = (Node) element;    //temp为最后一个结点或者是头结点,将其next指向新结点
        i++;

        //链表为空
        return i;
    }

    public void insert(int index, Node element) {
        //首先需要判断指定位置是否合法,
        if(index<1||index>size()){
            System.out.println("插入位置不合法。");
            return;
        }

        Node temp = (Node) get(index);

        element.next = temp.next;
        temp.next = element;
    }

    @Override
    public Object remove(int index) {
        //判断index是否合理
        if(index<1 || index>size()){
            System.out.println("给定的位置不合理");
            return null;
        }

        Node temp = (Node) get(index-1);

        temp = temp.next.next;

        return temp;
    }

    public void tostring() {
        Node temp = head;
        while(temp.next!=null) {
            System.out.print(" "+temp.data);
            temp = temp.next;
        }

    }

    public static void main(String[] args) {
        SingleList s = new SingleList();
        s.add("1");
        s.add("1");
        s.add("1");
        s.add("1");
        s.tostring();
    }
}

class Node{
    Node next = null;
    Object data;

    public Node(Object data) {
        this.data = data;
    }
}

  • 写回答

1条回答

  • 关注

    head.next这里,head对象没有初始化

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月9日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能