使用节点类检查链接列表是否为Palindrome

时间:2016-10-25 19:05:26

标签: java

我有一个项目问题,我需要检查一个链表是否是一个回文,同样向前和向后。我得到了一个名为Node类的类,其中包含我不允许更改的特定信息,所以我必须使用我在该类中所拥有的内容,并且不能在那里写更多内容来帮助我。我的问题是我可以通过列表,但我不知道如何倒退并比较值。

免责声明:我不想要一个完整的答案,只是提示/想法!

以下是我无法改变并且必须与之合作的课程:

class Node {
    /**
     *  The value stored in the node.
     */
    public Character value;

    /**
     *  A pointer to the next node in
     *  the list.
     */
    public Node next;

    /**
     *  A pointer to the previous node
     *  in the list. (Note: having this
     *  pointer makes this a "doubly linked"
     *  list.
     */
    public Node prev;

    /**
     *  A constructor to set up a
     *  node with a value.
     *  
     *  @param value the value to put in the node
     */
    public Node(Character value) {
        this.value = value;
    }

    /**
     *  A constructor to set up a
     *  node with a value and a pointer
     *  to the previous node (so I can
     *  append items easily in my test
     *  code).
     *  
     *  @param value the value to put in the node
     *  @param prev the previous node in the list
     */
    public Node(Character value, Node prev) {
        this.value = value;
        this.prev = prev;
    }

    /**
     *  Sets the next node in the list.
     *  
     *  @param n the next node in the list
     */
    public void setNext(Node n) {
        next = n;
    }

    /**
     *  Sets the previous node in the list.
     *  
     *  @param n the previous node in the list
     */
    public void setPrev(Node n) {
        prev = n;
    }
}

到目前为止,这就是我所拥有的,我只是尽我所能:

public static boolean listPalindrome(Node input) {

        if(input == null)
        {
            throw new IllegalArgumentException();
        }

        int count = 0;

        while(input.next != null)
        {
            count++;
        }

        Node holder = new Node(null, input.next);

        for(int i = 0;i<count;i++)
        {
            if(input.next != null)
            {
                break;
            }
            else
            {

            }
        }

        return false; //replace this
    }

请帮忙! 谢谢!

1 个答案:

答案 0 :(得分:0)

你有count++的无限循环。由于您未在循环中更新input.next的值,因此input将始终为非null。

如果您过去了,则没有理由在代码中声明new Node。假设链表的大小为&gt;,您在第一次迭代时也会中断循环。 0,你应该检查input.next == null,但把它放在循环的末尾。

同时注意到你的GMU学生违反荣誉准则会对我提供更多的帮助;)