informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
思路🧐:
penunjuk kecepatan+Daftar tertaut terbalik , temukan simpul perantara melalui penunjuk cepat dan lambat, lalu balikkan semua simpul setelah simpul perantara. Jika merupakan daftar tertaut palindrom, maka nilai dari simpul perantara ke simpul perantara sama dengan nilai dari simpul kepala ke simpul perantara .
Kode ✨:
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;
}