連結串列的會迴文結構。
阿新 • • 發佈:2021-02-14
題目描述
對於一個連結串列,請設計一個時間複雜度為O(n),額外空間複雜度為O(1)的演算法,判斷其是否為迴文結構。
給定一個連結串列的頭指標A,請返回一個bool值,代表其是否為迴文結構。保證連結串列長度小於等於900。
測試樣例:
1->2->2->1
返回:true
程式碼
struct ListNode*reverseList(struct ListNode*head)
{
struct ListNode*cur =head;
struct ListNode*newhead =NULL;
while (cur)
{
struct ListNode*next=cur->next;
cur->next=newhead;
newhead =cur;
cur=next;
}
return newhead;
}
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
struct ListNode*fast=A,*slow=A;
while(fast && fast->next)
{
fast=fast->next->next;
slow=slow->next;
}
struct ListNode*part1=A,*part2=reverseList(slow);
while(part1 && part2)
{
if(part1->val != part2->val)
{
return false;
}
else{
part1=part1->next;
part2=part2->next;
}
}
return true;
// write code here
}
};