LeetCode 234. Palindrome Linked List判断链表是否回文

来源:互联网 发布:嫁给老男人 知乎 编辑:程序博客网 时间:2024/05/16 10:20

/************************************************************************
* Given a singly linked list, determine if it is a palindrome.
*
* Follow up:
* Could you do it in O(n) time and O(1) space?
************************************************************************/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/

class Solution {public:    //find the mid in the List    ListNode* findMid(ListNode* head) {        ListNode *slow=head,*fast=head;         while (fast&&fast->next) {            fast=fast->next->next;            slow=slow->next;        }        return slow;    }    //reverse the hafl List    ListNode* reverse(ListNode* head) {       ListNode *pre=head;ListNode* cur=pre->next;       pre->next=NULL;       while (cur) {           ListNode *nxt=cur->next;           cur->next=pre;           pre=cur;           cur=nxt;       }       return pre;    }    bool isPalindrome(ListNode* head) {        if (head==NULL||head->next==NULL) return true;        ListNode *mid=findMid(head);        ListNode *pre=reverse(mid);        while (pre) {            if (pre->val!=head->val)                return false;            pre=pre->next;            head=head->next;        }        return true;    }};
0 0
原创粉丝点击