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