[LeedCode OJ]#234 Palindrome Linked List
来源:互联网 发布:南望王师又一年 知乎 编辑:程序博客网 时间:2024/06/12 21:37
【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目链接:https://leetcode.com/problems/palindrome-linked-list/
题意:
给定一个链表,判断这个链表是否回文的,要求时间复杂度是O(n),空间复杂度是O(1)
思路:
这道题很容易想到用栈来实现,但是如果要用到栈的话我们是达不到空间复杂度的要求
然而这道题我们可以与第206题Reverse Linked List结合起来,传送门:206题解
首先我们还是适用双指针的思想,运用快指针fast和慢针slow,fast还是一次走两步,slow还是一次走一步
那么当fast无路可走的时候,slow刚好就走了整个链表的一半了,这个时候我们就可以根据奇偶不同的情况,以slow指针为界来翻转后面的链表,这就是我们要结合206来做这道题的原因了。
这个时候我们就可以用head和slow指针一个个往下传递的同时并且比较来判断整个链表是不是回文链表了。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution{public:ListNode* reverseList(ListNode* head){ListNode *pre = nullptr;ListNode *newhead = nullptr;ListNode *node = head;while(node!=nullptr){ListNode *next = node->next;if(next==nullptr)newhead = node;node->next = pre;pre=node;node = next;}return newhead;}bool isPalindrome(ListNode* head){if(head==nullptr || head->next==nullptr) return true;ListNode *fast = head;ListNode *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}if(fast) //奇数 {slow->next = reverseList(slow->next); //翻转链表 slow = slow->next;}else //偶数 {slow = reverseList(slow);}while(slow){if(slow->val!=head->val)return false;slow = slow->next;head = head->next;}return true;}};
0 0
- [LeedCode OJ]#234 Palindrome Linked List
- [LeedCode OJ]#141 Linked List Cycle
- [LeedCode OJ]#206 Reverse Linked List
- [LeedCode OJ]#142 Linked List Cycle II
- [LeedCode OJ]#203 Remove Linked List Elements
- 234Palindrome Linked List
- Palindrome Linked List 234
- 234 Palindrome Linked List
- 234Palindrome Linked List
- 234 Palindrome Linked List
- 234 - Palindrome Linked List
- 234Palindrome Linked List
- [234]Palindrome Linked List
- [234] Palindrome Linked List
- 234-Palindrome Linked List
- [LeedCode OJ]#237 Delete Node in a Linked List
- [leedcode oj 237]Delete Node in a Linked List
- <LeetCode OJ> 234. Palindrome Linked List
- lintcode-BinarySearch-14
- $(function(){})与(function($){})(jQuery)
- zookeeper 分布式锁服务
- 关于运动
- hdu2647 Reward
- [LeedCode OJ]#234 Palindrome Linked List
- 选择排序之堆排序
- 十道海量数据处理题
- UVA 816 有点绕的迷宫
- 【经典算法】STL之next_permutation和prev_permutation
- 算法系列-合并有序数组
- 数组中只出现一次的数字
- Nginx基础. 开发HTTP过滤模块
- cannot do a partial commit during a merge