#c #linked-list #palindrome
#c #связанный список #палиндром
Вопрос:
Вот мой код.
Концепция состоит в том, чтобы пройти весь linkedlist, взяв два указателя быстро и медленно, когда медленный находится в середине, перевернет список и сравнит его со второй половиной, которая быстрая.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
ListNode *fast= head;
ListNode *slow= head;
while( fast!=NULLamp;amp;fast->next !=NULL)
{
fast=head->next->next;
slow=head->next;
}
slow= reverse(slow);
fast= head;
while(slow!=NULL)
{
if(fast->data!=slow->data)
return false
slow =slow->next;
fast=fast->next;
}
return true;
}
public: ListNode reverse(ListNode *head){
ListNode *prev = NULL;
while(head!=NULL)
{
ListNode* nextnode=head->next;
head->next=prev;
prev=head;
head=nextnode;
}
return prev;
}
};
Я получаю эту незначительную ошибку, пожалуйста, помогите исправить код
Строка 22: Символ 15: ошибка: присвоение ‘ListNode *’ из несовместимого типа ‘ListNode’
медленный = обратный (медленный);
Комментарии:
1. Вы должны (или получите) аналогичную ошибку с
return prev;
в концеreverse
; помогает ли это определить, в чем проблема?2. «Не исправлено» — это почти совершенно бесполезный комментарий. Что вы изменили? Каков был результат?
Ответ №1:
Прежде всего, как вы можете видеть ниже, ваша обратная функция возвращает объект типа ListNode.
ListNode reverse(ListNode* head)
{
ListNode* prev = NULL;
while (head != NULL) {
ListNode* nextnode = head->next;
head->next = prev;
prev = head;
head = nextnode;
}
return prev;
}
Однако вы хотите вернуть «prev», который имеет тип ListNode *, поэтому я предлагаю вам изменить возвращаемый тип с «ListNode» на «ListNode *» в вашей обратной функции следующим образом:
ListNode* reverse(ListNode* head)