gpt4 book ai didi

java - 如何在 Java 中检查链表是否为回文?

转载 作者:行者123 更新时间:2023-11-30 08:13:06 25 4
gpt4 key购买 nike

我写了一段代码来检查单向链表是否是回文。我做了两个步骤:

第一。反转原始链表。

第二。检查原链表和反向链表是否有相同的元素。

    public static Boolean isPalindrome(Node input){
Node reversed= reverse(input);
while (input!=null){
if(input.item!=reversed.item)
return false;
input=input.next;
reversed=reversed.next;
}
return true;
}
static Node head;
public static Node reverse(Node input){
if(input==null || input.next==null){
head=input;
return input;
}
else{
reverse(input.next);
input.next.next=input;
input.next=null;
return head;
}
}

这个程序有效。但是我想,在执行reverse方法的时候,既然传入了原链表的头,那么原链表可能也会发生变化,那么isPalindrome应该也返回true吧?我是对的还是你能告诉我我是否误解了任何概念?谢谢

这是主要功能以及我如何使用该代码:

public static void main(String [] args){
Node a=new Node(9);
Node b=new Node(8);
Node c=new Node(7);
Node d=new Node(6);
a.next=b;
b.next=c;
c.next=d;
//d.next=c;
Boolean tf=isPalindrome(a);
if (tf)
System.out.println("Is Palindrome!");
else
System.out.println("Not Palindrome");
}

最佳答案

实际上,您的方法有效。尝试使用包含 3,4,5,3 的列表。它将返回 true

此外,它还更改了传递给它的列表,这不是一个好主意。如果您在运行您的方法后执行类似 System.out.println(a) 的操作(假设您编写了正确的 toString() 方法),您会惊讶地发现发现它只有一项...

这确实是因为传递对象引用就像在 C 等语言中传递指针一样。如果您更改该对象的内容(最终您会这样做,因为在 reverse 中您将 null 放在它的 next 中),那么它会保持更改.

那么为什么你的程序返回true?因为正如我所说,input 变成了一个单项列表。 reversed 包含完整的反向列表,input 仅指向其最后一项。由于您在 input 上循环,然后如果第一个和最后一个项目相同,您将得到 true - 无论列表是否一个回文。那是因为您只迭代了 input 指向的一项。

关于java - 如何在 Java 中检查链表是否为回文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com