Leetcode 234. 回文链表 解题思路及C++实现
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 234. 回文链表 解题思路及C++实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
解題思路:
先用快慢指針找到鏈表的中間節(jié)點(diǎn),然后將鏈表一分為二;
然后將后半部分鏈表進(jìn)行翻轉(zhuǎn),用到三個(gè)指針;
接著分別遍歷兩個(gè)鏈表,逐個(gè)比較 val 值,如果出現(xiàn)不相等,就返回 false。
?
/*** 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;//定義快慢指針,找到中間節(jié)點(diǎn)ListNode* slow = head;ListNode* fast = head->next;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}//slow所指節(jié)點(diǎn)即為中間節(jié)點(diǎn),將后面的鏈表進(jìn)行翻轉(zhuǎn)fast= slow->next;slow->next = NULL;//三個(gè)指針,將fast后面的鏈表進(jìn)行翻轉(zhuǎn)ListNode* left = fast;ListNode* right = left->next;left->next = NULL; //記得這里要把頭結(jié)點(diǎn)的next指針指向NULLListNode* tmp = NULL;if(right) tmp = right->next;while(right){right->next = left;left = right;right = tmp;if(tmp) tmp = tmp->next;}//left指針就是翻轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)while(left && head){if(left->val != head->val){return false;}else{left = left->next;head = head->next;}}return true;} };?
?
?
總結(jié)
以上是生活随笔為你收集整理的Leetcode 234. 回文链表 解题思路及C++实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 125. 验证回文串
- 下一篇: Leetcode 344. 反转字符串