为什么这个双链表程序会给我一个空指针异常? [重复]

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 配置文件它返回空指针异常

奇怪的java字符串数组空指针异常[重复]

在 C++ 中使用指向我的数组的指针会给我一个“未处理的异常”吗?

文档监听器带来空指针异常