這篇文章主要講解了“Python怎么判斷一個單鏈表是否是回文鏈表”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python怎么判斷一個單鏈表是否是回文鏈表”吧!
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供蘆淞網(wǎng)站建設(shè)、蘆淞做網(wǎng)站、蘆淞網(wǎng)站設(shè)計、蘆淞網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、蘆淞企業(yè)網(wǎng)站模板建站服務(wù),十載蘆淞做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
判斷一個單鏈表是否是回文鏈表。
如:[1, 2, 3, 2, 1] 就是一個回文鏈表,正著依次看鏈表中元素和反著依次看鏈表中元素都是一樣的。
解題思路:
必須做的第一個步驟就是判斷輸入鏈表是否為空,或者只有一個元素。如果為空或者只有一個元素,則此鏈表為回文鏈表返回true。
使用快慢指針,找到鏈表中點。慢指針一次走一步,快指針一次走兩步。
根據(jù)找到的鏈表中點,反轉(zhuǎn)后半部分的鏈表的所有值,并與整體單鏈表的值從頭依次比對,有一個值不同,則不是回文鏈表,否則為回文鏈表。
如輸入單鏈表:[1, 2, 3, 2, 1]
反轉(zhuǎn)后半部分得到的單鏈表:[1, 2]
Language:C
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head) {struct ListNode* pre = (struct ListNode *)malloc(sizeof(struct ListNode));struct ListNode* next = (struct ListNode *)malloc(sizeof(struct ListNode)); pre=NULL; next=NULL;while(head!=NULL){ next=head->next; head->next=pre; pre=head; head=next; }return pre; }bool isPalindrome(struct ListNode* head) {struct ListNode* slow = (struct ListNode *)malloc(sizeof(struct ListNode));struct ListNode* fast = (struct ListNode *)malloc(sizeof(struct ListNode));if(head == NULL || head->next == NULL){return true; } fast = head; slow = head;while(fast->next && fast->next->next){ slow = slow->next; fast = fast->next->next; } slow = reverseList(slow->next);while(slow){if(head->val != slow->val){return false; } head = head->next; slow = slow->next; }return true; }
Language:cpp
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) {if(head == NULL || head->next == NULL){ return true; } ListNode* slow = head; ListNode* fast = head;while(fast->next && fast->next->next){ slow = slow->next; fast = fast->next->next; } slow = reverseList(slow->next);while(slow){if(head->val != slow->val){ return false; } head = head->next; slow = slow->next; } return true; } ListNode* reverseList(ListNode* head){ ListNode* pre = NULL; ListNode* next = NULL;while(head!=NULL){next=head->next; head->next=pre; pre=head; head=next; } return pre; } };
感謝各位的閱讀,以上就是“Python怎么判斷一個單鏈表是否是回文鏈表”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Python怎么判斷一個單鏈表是否是回文鏈表這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!