我有一个项目问题,我需要检查一个链表是否是一个回文,同样向前和向后。我得到了一个名为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
}
请帮忙! 谢谢!
答案 0 :(得分:0)
你有count++
的无限循环。由于您未在循环中更新input.next
的值,因此input
将始终为非null。
如果您过去了,则没有理由在代码中声明new Node
。假设链表的大小为&gt;,您在第一次迭代时也会中断循环。 0,你应该检查input.next == null
,但把它放在循环的末尾。
同时注意到你的GMU学生违反荣誉准则会对我提供更多的帮助;)