gpt4 book ai didi

Java,函数无法识别返回语句

转载 作者:行者123 更新时间:2023-12-04 10:38:19 25 4
gpt4 key购买 nike

在编写用于检查链表是否为回文的代码时,我创建了一个 reverseLL 函数,该函数返回一个反向链表和一个要检查的 isPallindrome 函数。问题是没有检测到循环内的 return 语句,只有最后一条语句返回真;每次都被执行:
我正在检查 LL 是否是回文,方法是将其分为 2 部分并反转下半部分,然后比较两半部分

public static Node<Integer> reverseLL(Node<Integer> head){
Node<Integer> prev = null;
Node<Integer> current = head;
Node<Integer> next = null;
while(current != null) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
head = prev;
return head;
}
public static boolean isPallindrome(Node<Integer> head) {
if(head == null || head.next == null) {
return true;
}

Node<Integer> fast = head;
Node<Integer> slow = head;

while(fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}

Node<Integer> secondHead = slow.next;
slow.next = null;
secondHead = reverseLL(secondHead);

Node<Integer> p = secondHead;
Node<Integer> q = head;
while(p != null) {
if(p.data != q.data) {
return false;
}
p = p.next;
q = q.next;
}
return true;
}

最佳答案

我不会运行你的代码,因为它不完整。但是,您似乎找到了列表的最后一个元素并将其从那里反转,而没有考虑到它也反转了您已经使用 head 引用的列表。 .因此,当您开始比较循环时,您有一个指向反向列表中第一个元素的指针和一个指向反向列表中最后一个元素的指针。您绝对不会将列表分成两部分。

您的代码也过于复杂。正确的算法是:

find head and tail of list
while (head != tail) {
if (head.value != tail.value)
return false;
head = head.next;
tail = tail.prev;
}

您不需要两个循环变量来查找链表的尾部。正确的算法是:
tail = head
while (tail.next != null) {
tail = tail.next;
}

此外,您通常不能将整数与相等运算符进行比较。您必须将它们拆箱为原始整数或使用等于。尝试运行:
System.err.println(new Integer(1) == new Integer(1));
System.err.println(new Integer(1).equals(new Integer(1)));

关于Java,函数无法识别返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60057271/

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