2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
思路🧐:
गतिसूचकः+लिङ्क् कृतसूचीं विपर्ययम् , द्रुत-मन्द-सूचकानाम् माध्यमेन मध्यवर्ती-नोड्-इत्येतत् अन्वेष्टुम्, ततः मध्यवर्ती-नोड्-पश्चात् सर्वाणि नोड्स्-विपर्ययम् । यदि एषा पैलिण्ड्रोम-लिङ्क्ड्-सूची अस्ति, तर्हि मध्यवर्ती-नोड्-तः मध्य-नोड्-पर्यन्तं मूल्यानि हेड-नोड्-तः मध्य-नोड्-पर्यन्तं मूल्यानां समानानि भवन्ति यदि असमान-मूल्यानि सन्ति, तर्हि सा पैलिण्ड्रोम्-लिङ्क्ड्-सूची नास्ति .
संहिता ✨: .
struct ListNode* MidNode(struct ListNode* head) //找中间结点
{
struct ListNode* fast = head;
struct ListNode* slow = head;
while(fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
struct ListNode* Reverse(struct ListNode* midhead) //链表反转
{
struct ListNode* rhead = NULL;
struct ListNode* cur = midhead;
while(cur)
{
struct ListNode* tail = cur->next;
cur->next = rhead;
rhead = cur;
cur = tail;
}
return rhead;
}
bool isPalindrome(struct ListNode* head){
struct ListNode* cur = head;
struct ListNode* mid = MidNode(head);
struct ListNode* midhead = Reverse(mid);
while(cur != mid) //当cur走到mid结点处就结束
{
if(cur->val != midhead->val) //如果不相等就返回false
{
return false;
}
else //如果相等就继续往后走
{
cur = cur->next;
midhead = midhead->next;
}
}
return true;
}