【LeetCode】234. 迴文連結串列
阿新 • • 發佈:2018-12-16
題目描述
請判斷一個連結串列是否為迴文連結串列。
示例
輸入: 1->2 輸出: false
輸入: 1->2->2->1 輸出: true
進階: 你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?
解決方法
思路:把後半段的連結串列原地反轉(反轉見第206題),然後和前半段進行比較
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
//思路:把後半段的連結串列原地反轉(反轉見第206題)然後和前半段進行比較
if (!head || !head->next) return true;
//找到後半段的起點
ListNode* slow=head;
ListNode* fast=head;
while(fast->next && fast->next-> next){
slow=slow->next;
fast=fast->next->next;
}
//反轉後半段
ListNode *new_head=NULL;
ListNode *temp=NULL;
while(slow){
temp = slow->next;
slow->next = new_head;
new_head = slow;
slow = temp;
}
//前半段與後半段進行比較
while(head && new_head){
if (head->val!=new_head->val) return false;
head=head->next;
new_head=new_head->next;
}
return true;
}
};