Java删除链表节点时出现java.lang.NullPointerException异常如何解决?
空指针异常触发原因
- 入参
pos超过链表总长度时,while循环执行结束后temp会被赋值为null,后续直接访问temp.prev会直接抛出空指针异常 - 头节点删除逻辑存在问题,Java是值传递,
deleteAtHead(head)方法内部修改的是形参的副本,不会修改当前方法里的head引用,删除头节点后返回旧的头节点,后续对该节点的操作也会触发空指针 - 缺失
head本身为null的边界判断,传入空链表时从第一行逻辑就会触发空指针
修复方案
- 开头优先判断头节点是否为空,避免空链表操作异常
while循环结束后增加temp非空判断,非法pos直接返回原头节点或抛出参数异常- 修改头节点删除逻辑,接收
deleteAtHead返回的新头节点后再返回(需保证deleteAtHead方法本身实现正确,返回删除头节点后的新头)
修复后代码示例:
public static Node deletion(Node head , int pos) { // 优先处理空链表边界情况 if (head == null) { return null; } if(pos==1) { // 直接返回删除头节点后的新头 return deleteAtHead(head); } Node temp=head; int count=1; while(temp!=null && count!=pos) { temp=temp.next; count++; } // 新增pos越界判断,避免空指针 if (temp == null) { // 可根据业务需求替换为抛出IllegalArgumentException return head; } temp.prev.next=temp.next; if(temp.next!=null) { temp.next.prev=temp.prev; } return head; }
内容的提问来源于stack exchange,提问作者Aryan Shaw
相关产品推荐
相关产品推荐

