您的位置:首页 > 其它

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

2016-07-10 19:53 393 查看
/[b]************************************************************************[/b]

* 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?

[b]************************************************************************[/b]/

/**

* 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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode