标签:
判断单链表是否为回文;
思想:利用来两个指针找到链表中点,将后半个链表反转。然后判断。
有个问题,下面的代码没有恢复原来的单链表。
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 };
标签:
原文地址:http://www.cnblogs.com/ZhangYushuang/p/4758764.html