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

7hiiyaii  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(364)

这个问题在这里已经有答案了

什么是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。但是,如果我一次只使用其中一个,它们工作得很好,但是当我将它们放在递归中时,就会出现问题。
有没有办法解决这个问题??

nfeuvbwi

nfeuvbwi1#

可能还有其他问题,但是 rec(removeFront(list), n++) 很明显是在这里。此语句将执行方法调用,然后递增 n 它永远不会被使用。
将此更改为 rec(removeFront(list), n+1)

相关问题