请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师请帮我看看为啥这段代码一直都抱空指针异常

``

    ListNode dummyHead = new ListNode(-1);
    dummyHead.next = head;
    ListNode prev = dummyHead;

    while(prev.next != null){
        if(prev.next.val == val){
            ListNode delNode = prev.next;
            prev = prev.next.next;
            delNode.next = null;
        }else{
            prev = prev.next;
        }
    }
    return dummyHead.next;
}

``

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-06-04 02:23:47

请给我这个函数整体的函数签名。以及你测试报空指针异常对应的完整测试函数。


另外,在 IDE 上,报空指针异常的时候,都会告诉你哪句话报了异常,可以基本看出是哪个变量的空导致的问题。单步跟踪试试看?看为什么这个变量会变成空?


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕UI5426068 #1
    public class LeetCode203_2 {
        public ListNode removeElements(ListNode head, int val) {
            ListNode dummyHead = new ListNode(-1);
            dummyHead.next = head;
            System.out.println(head.val);
            ListNode prev = dummyHead;
            while(prev.next != null){
                if(prev.next.val == val){
                   ListNode delNode = prev.next;
                   prev = delNode.next;
                   delNode.next = null;
                }else{
                    prev = prev.next;
                }
            }
            return dummyHead.next;
        }

        public static void main(String[] args) {
            int[] arr = {1,2,6,3,4,5,6};
            ListNode head = new ListNode(arr);
            System.out.println(head);

            ListNode node = (new LeetCode203_2()).removeElements(head,6);
            System.out.println(node);
        }
    }
    它在while(prev.next != null)这一行抱空值针了 但我还是没找到原因 麻烦老师了
    回复 有任何疑惑可以回复我~ 2020-06-05 10:35:41
  • liuyubobobo 回复 提问者 weixin_慕UI5426068 #2
    说明在某次循环中,调 prev.next 的时候,prev 是空。你的测试用例只有6个节点,而且我严重怀疑你继续减小测试用例,两三个节点也能复现这个错误。实际单步跟踪调试试试看,为什么 prev 会变成空?哪里变成的空?自己的实际代码执行和自己思考的逻辑是否一致?如果不一致,哪里有问题?进步就发生在这个过程中哦。加油!:)
    回复 有任何疑惑可以回复我~ 2020-06-05 10:44:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信