当我试图反转原始链表时,它在函数调用后丢失了。为什么会这样呢?
Node *reverse(Node *head)
{
Node *prevNode = NULL, *currNode = head;
while (currNode != NULL)
{
Node *nextNode = currNode->next;
currNode->next = prevNode;
prevNode = currNode;
currNode = nextNode;
}
return prevNode;
}
bool isPalindrome(Node *head)
{
Node *temp = head;
Node *reversedList = reverse(temp);
temp = head;
while (temp != NULL)
{
if (temp->data != reversedList->data)
{
return false;
}
temp = temp->next;
reversedList = reversedList->next;
}
return true;
}
1条答案
按热度按时间xxslljrj1#
原来的链表丢失了,因为reverse函数修改了它。要在不丢失原始列表的情况下检查回文,请在反转之前对列表进行深层复制。然后,将原始列表与反向的深副本进行比较。试试这个: