1. 程式人生 > >【LeetCode】234. 迴文連結串列

【LeetCode】234. 迴文連結串列

題目描述

請判斷一個連結串列是否為迴文連結串列。

示例

輸入: 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; } };