请稍等 ...
×

采纳答案成功!

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

removeLast()方法为什么会出现空指针

为什么我的removeLast方法会出现空指针
remove()方法

//在链表中删除元素
	public E remove(int index) {
		if(index<0||index>=size) {
			throw new IllegalArgumentException("下标不在范围之内");
		}
		Node prev = dummyHead;
		for(int i=0;i<index;i++) {
			prev = prev.next;
		}
		Node retNode = prev.next;
		prev.next = retNode.next;
		retNode.next = null;
		size--;
		
		return retNode.e;
	}

removeLast()方法

//从链表中删除最后一个元素,返回删除的元素
	public E removeLast() {
		return remove(size-1);
	}

图片描述
图片描述

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

1回答

提问者 qq_往事_8 2019-01-13 19:01:45

老师 问题我通过查看你github里的代码解决了,是因为我的addFirst方法里多了一句size++,想问一下为什么addFirst里不需要size++,加上了这句话为什么会导致removeLast方法空指针。

0 回复 有任何疑惑可以回复我~
  • addFirst方法调用了void add(int index, E e)方法,在这个add方法中,我们已经对size进行维护了。如果addFirst里再写size ++,size的值就错了,就可能导致在其他使用size的函数中,访问不存在的空间。(size等于2,但只有1个元素):)
    回复 有任何疑惑可以回复我~ 2019-01-14 01:54:53
  • 提问者 qq_往事_8 回复 liuyubobobo #2
    把removeLast方法改成size-2或者减3也是空指针 这是为什么啊,如果减的数大一些会好么?
    回复 有任何疑惑可以回复我~ 2019-01-14 07:59:07
  • liuyubobobo 回复 提问者 qq_往事_8 #3
    不会。程序要维持变量的语义。size就是指链表中的元素个数。每添加一个元素要+1;每删除一个元素要-1。多加或者多减都是不正确的。
    回复 有任何疑惑可以回复我~ 2019-01-14 09:10:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信