如何删除链表java中的所有evens

Bra*_*hen 2 java nodes

如何删除java中链表中的所有evens?其他类似的问题对我没有帮助.我有一个可能的解决方案,但它似乎太复杂了.我不确定它是否有效.

public class Node {
public int value;
public Node next;
public Node (int val) {
    value = val;
}
public Node removeNode (Node root) {
    if (root == null || (root.next == null && isOdd(root.value))) {
        return null;
    }
    Node deep = root;
    while (deep.next != null) {
        deep = deep.next;
    }
    if (isOdd(deep.value)) {
        for (Node x = root; x != null; x = x.next) {
            if (isOdd(x.next.value)) {
                x.next = x.next.next;
            }
        }
    } else {
        for (Node x = root; x.next != null; x = x.next) {
            if (isOdd(x.next.value)) {
                x.next = x.next.next;
            }
        }
    }
    if (isOdd(root.value)) {
        root = root.next;
    }
    return root;
}
public boolean isOdd (int val) {
    return (val % 2 == 1);
}
Run Code Online (Sandbox Code Playgroud)

我该如何改进这个解决方案?

Par*_*alo 5

首先:该remove方法应该在你的LinkedList班级,而不是在Node班级本身!

在那之后,很容易删除偶数:

public class LinkedList {
    private Node root;

    public void removeEvens() {
        if (root == null) return;

        // removing all even nodes after the root
        Node prev = root;
        while (prev.next != null) {
            if (isEven(prev.next))
                prev.next = prev.next.next;   // next is even: delete it
            else
                prev = prev.next;             // next is not even: proceed
        }

        // delete root if it's even
        if (isEven(root))
            root = root.next;
    }

    private boolean isEven(Node node) {
        return node.value % 2 == 0;
    }
}
Run Code Online (Sandbox Code Playgroud)