LeetCode Palindrome Linked List (迴文鏈表)

來源:互聯網
上載者:User

標籤:

 

 

題意:給個單鏈表,判斷是否為迴文。

思路:有點BT,處理不好都是死迴圈。一般思路是,二分尋找中心點,根據奇偶個元素,反置前半部分,再判斷是否迴文,再恢複前半部分。

步驟:

  (1)在二分尋找中心點時判斷順便反置前半部分鏈表。

  (2)對奇偶數處理好剩下的工作。這是重點

  (3)兩個指標來判斷是否迴文。

  (4)將前半段恢複起來,比較簡單,有個head作為界限標誌呢。

 

 1 /** 2  * Definition for singly-linked list. 3  * struct ListNode { 4  *     int val; 5  *     ListNode *next; 6  *     ListNode(int x) : val(x), next(NULL) {} 7  * }; 8  */ 9 class Solution {10 public:11     bool isPalindrome(ListNode* head) {12         if(!head || !head->next)   return true;   //保證起碼兩個13         bool ans=false;//答案要記錄。14         ListNode *mid=head, *e=head->next;  //用於找中點15         ListNode *p=0, *q=mid, *s=0;        //用於反置前半鏈表16 17         while(e && e->next)   //找中間點時順便反置前部分鏈表。以減少建立指標。18         {19             mid=mid->next;20             e=e->next->next;21             q->next=p;22             p=q;23             q=mid;24         }25         s=mid->next;//s一定要處於後半段的欲比較部分。26         if(e)     q->next=p, p=q, mid=mid->next;            //偶數個,q在前半段的尾部,還沒有完全反好鏈表。27         else      q=p;                                      //奇數個,q會在中點位置,要挪向前。28 29         while(s && p->val==s->val)   p=p->next,s=s->next;//判斷是否迴文30         if(!s)  ans=true;31 32         //q為前段鏈表頭。mid為後段鏈表頭,只有後段才可能奇數個。33         //恢複前半段, q已經連著那條鏈的鏈頭。34 35         while(q!=head)36         {37             s=q->next;38             q->next=mid;39             mid=q;40             q=s;41         }42         return ans;43     }44 };
AC代碼

 

LeetCode Palindrome Linked List (迴文鏈表)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.