Palindrome Linked List

判断单链表是否为回文;

思想:利用来两个指针找到链表中点,将后半个链表反转。然后判断。

有个问题,下面的代码没有恢复原来的单链表。

 1 class Solution {
 2 public:
 3     bool isPalindrome(ListNode* head) {
 4         ListNode* ptr1,*ptr2,*tail;
 5         if(head==NULL||head->next==NULL)
 6         return true;
 7         ptr1 = head;
 8         ptr2 = head;
 9         tail = head;
10         while(tail->next!=NULL)
11             tail = tail->next;
12 
13         while(ptr2!=NULL && ptr2->next!=NULL)
14         {
15             ptr1=ptr1->next;
16             ptr2=ptr2->next;
17             if(ptr2->next!=NULL)
18                ptr2 = ptr2->next;
19         }
20 
21         ptr2 = ptr1;
22         ListNode* t1=NULL,*t2;
23         while(ptr2!=NULL)
24         {
25             t2 = ptr2->next;
26             ptr2->next = t1;
27             t1 = ptr2;
28             ptr2 = t2;
29         }
30         ListNode* l1=head,*l2=tail;
31         while(l2 != NULL)
32         {
33             if(l1->val!=l2->val)
34                return false;
35             l1 = l1->next;
36             l2 = l2->next;
37         }
38 
39 
40         return true;
41 
42     }
43 };

 

posted @ 2015-08-25 21:40  醉剑客  阅读(198)  评论(0编辑  收藏  举报