Palindrome Linked List

判斷單鏈表是否爲迴文;spa

思想:利用來兩個指針找到鏈表中點,將後半個鏈表反轉。而後判斷。指針

有個問題,下面的代碼沒有恢復原來的單鏈表。code

 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 };
相關文章
相關標籤/搜索