这个问题在这里已经有答案了:
什么是nullpointerexception,如何修复它(12个答案)
一年前关门了。
基本上,问题是:
给定一个字符列表,执行以下操作,直到它只有一个元素:
从头开始,删除列表中的每一个节点,例如,对“defghij”执行此操作应返回“acegi”
从步骤1生成的列表的末尾开始,删除第二个节点,因此对“acegi”执行此操作应返回“aei”
执行这些步骤,直到列表只有1个元素
这个特殊清单的最终解决办法应该是“我”。
我的解决方案是:
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。但是,如果我一次只使用其中一个,它们工作得很好,但是当我将它们放在递归中时,就会出现问题。
有没有办法解决这个问题??
1条答案
按热度按时间nfeuvbwi1#
可能还有其他问题,但是
rec(removeFront(list), n++)
很明显是在这里。此语句将执行方法调用,然后递增n
它永远不会被使用。将此更改为
rec(removeFront(list), n+1)