为什么这个双链表程序会给我一个空指针异常? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个双链表程序会给我一个空指针异常? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
基本上,问题是:
- 给定一个字符列表,执行以下操作,直到它只有1个元素: 从头开始,删除列表中的每个第二个节点,例如这样做“abcdefghij”应该返回“acegi” 从步骤1生成的列表末尾开始,删除每个第二个节点,这样做“acegi”应该返回“aei” 执行这些步骤,直到列表只有1个元素
这个特定列表的最终解决方案应该是“i”。
我的解决方案是:
public class listexercise {
public static DLL<Character> removeFront(DLL<Character> list){
DLLNode<Character> tmp = list.getFirst().succ;
while(tmp != null){
list.delete(tmp);
if(tmp.succ == null) {
tmp.pred.succ = null;
break;
}
tmp = tmp.succ.succ;
}
return list;
}
public static DLL<Character> removeEnd(DLL<Character> list){
DLLNode<Character> tmp = list.getLast().pred;
while(tmp != null){
list.delete(tmp);
if(tmp.pred == null) {
tmp.succ.pred = null;
break;
}
tmp = tmp.pred.pred;
}
return list;
}
public static DLL<Character> rec(DLL<Character> list, int n){
if(list.length() == 1)
return list;
else if(n%2 == 1)
return rec(removeFront(list), n++);
else if(n%2 == 0)
return rec(removeEnd(list), n++);
return list;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
DLL<Character> list = new DLL<Character>();
String input = s.nextLine();
char[] parts = input.toCharArray();
for(int i=0; i<parts.length; i++)
list.insertLast(parts[i]);
System.out.println(rec(list,1).toString());
}
}
这给了我removeFront或removeEnd上的NPE。但是,如果我一次只使用其中一个,它们可以完美地工作,但是当我将它们放入递归时,就会出现问题。
任何想法如何解决这一问题??
答案
可能还有其他问题,但rec(removeFront(list), n++)
在这里非常明显。这个语句将执行方法调用,然后递增永远不会使用的n
的值。
将此更改为rec(removeFront(list), n+1)
以上是关于为什么这个双链表程序会给我一个空指针异常? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 setProfile() 设置 MediaRecorder 配置文件它返回空指针异常