新人求助 学习数据结构单链表的实现

weixin_42073924 2020-04-11 10:39:53
我在进行单链表数据添加过程中,出现了空指针异常,我明明跟教学视频做的一样啊
...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42073924 2020-04-11
  • 打赏
  • 举报
回复
引用 6 楼 亦夜 的回复:
[quote=引用 5 楼 weixin_42073924 的回复:]
[quote=引用 3 楼 亦夜 的回复:]
[quote=引用 2 楼 weixin_42073924 的回复:]
[quote=引用 1 楼 亦夜 的回复:]
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]

引用 2 楼 weixin_42073924 的回复:
[quote=引用 1 楼 亦夜 的回复:]
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]

他肯定是在哪赋值了的,不然肯定会报错的,head本来就为空,不指向首节点,不可能用的,head本来就是为了指向首节点而方便操作链表[/quote]
哦,他在前边写了一个head=new Node(),这回不报错了,但是数据全是空的,我再看看。。[/quote]

你要加个判断,如果head.next为空则退出for直接添加结点,如果不为空将指针移到链表尾部添加[/quote]
弄出来了,我在get()里把p赋给了p.next,指针原地打转。。谢谢大佬,谢谢大佬
亦夜 2020-04-11
  • 打赏
  • 举报
回复
引用 5 楼 weixin_42073924 的回复:
[quote=引用 3 楼 亦夜 的回复:] [quote=引用 2 楼 weixin_42073924 的回复:] [quote=引用 1 楼 亦夜 的回复:] Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针
听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]
引用 2 楼 weixin_42073924 的回复:
[quote=引用 1 楼 亦夜 的回复:] Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针
听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote] 他肯定是在哪赋值了的,不然肯定会报错的,head本来就为空,不指向首节点,不可能用的,head本来就是为了指向首节点而方便操作链表[/quote] 哦,他在前边写了一个head=new Node(),这回不报错了,但是数据全是空的,我再看看。。[/quote] 你要加个判断,如果head.next为空则退出for直接添加结点,如果不为空将指针移到链表尾部添加
weixin_42073924 2020-04-11
  • 打赏
  • 举报
回复
引用 3 楼 亦夜 的回复:
[quote=引用 2 楼 weixin_42073924 的回复:]
[quote=引用 1 楼 亦夜 的回复:]
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]

引用 2 楼 weixin_42073924 的回复:
[quote=引用 1 楼 亦夜 的回复:]
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]

他肯定是在哪赋值了的,不然肯定会报错的,head本来就为空,不指向首节点,不可能用的,head本来就是为了指向首节点而方便操作链表[/quote]
哦,他在前边写了一个head=new Node(),这回不报错了,但是数据全是空的,我再看看。。
亦夜 2020-04-11
  • 打赏
  • 举报
回复
只要不是实现有序链表,正常直接添加就好了

/**
     * 添加结点的方法
     *
     * @param hereNode
     */
    public void add(HereNode hereNode) {
        //将临时指针指向头结点
        HereNode temp = head;

        while (true) {
            //我们需要将数据结点添加到最后链表尾部
            //如果它的下一位指针为空,则代表为尾部,返回
            if (temp.next == null) {
                break;
            }
            //如果不是尾部则继续讲指针后移
            temp = temp.next;
        }
        //条件为false时则代表指针到达链表尾部,添加结点
        temp.next = hereNode;
    }
亦夜 2020-04-11
  • 打赏
  • 举报
回复
引用 2 楼 weixin_42073924 的回复:
[quote=引用 1 楼 亦夜 的回复:] Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针
听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote]
引用 2 楼 weixin_42073924 的回复:
[quote=引用 1 楼 亦夜 的回复:] Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针
听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗[/quote] 他肯定是在哪赋值了的,不然肯定会报错的,head本来就为空,不指向首节点,不可能用的,head本来就是为了指向首节点而方便操作链表
weixin_42073924 2020-04-11
  • 打赏
  • 举报
回复
引用 1 楼 亦夜 的回复:
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

听懂了。。但是为什么视频里的就可以,我要写一个head.next=?;吗
亦夜 2020-04-11
  • 打赏
  • 举报
回复
Node p = head; head头结点为空,那么下一步 p = p.next ; 由于上面p赋值为head所以 p->next 为空 p被赋值为null, 在进行newNode.next = p.next // 由于p为空获取下一个结点next 抛出空指针

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧