276.LeetCode | 234. 回文链表

Posted 每天一个开发小知识

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了276.LeetCode | 234. 回文链表相关的知识,希望对你有一定的参考价值。

每天一个开发小知识


01


题目

请判断一个链表是否为回文链表


示例 1:

输入: 1->2

输出: false


示例 2:

输入: 1->2->2->1

输出: true


02

解法一:空间换时间

由于链表不具备随机访问特性

因此

我们将链表中的值保存到数组中

依次比较 vec[i] 和 vec[vec.size() - 1 - i] 是否相等

如果不等则不是回文链表

该思路利用的是 空间换时间

时间复杂度 O(n),空间复杂度 O(n)

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) { vector<int> vec; ListNode * p = head; while (NULL != p) { vec.push_back(p->val); p = p->next; }
for (int i = 0; i < vec.size() / 2; ++i) { if (vec[i] != vec[vec.size() - 1 - i]) { return false; } }
return true; }};

03

解法二:原地修改

链表不仅不能随机访问

同时还不能逆向访问

为了判断一个链表是否是回文

可以原地 修改链表

将链表的后半部分进行反转

这样就能通过双指针同时正向访问链表

反转链表的方法:


时间复杂度 O(n),空间复杂度 O(1)

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) { if (NULL == head || NULL == head->next) { return true; }
ListNode * fast = head; ListNode * slow = head; while (NULL != fast->next && NULL != fast->next->next) { slow = slow->next; fast = fast->next->next; } fast = head; slow = reverseList(slow->next);
while (NULL != slow) { if (fast->val != slow->val) { return false; } fast = fast->next; slow = slow->next; }
return true; }
ListNode* reverseList(ListNode* head) { ListNode * pre = NULL; ListNode * curr = head; while (NULL != curr) { ListNode * next = curr->next; curr->next = pre; pre = curr; curr = next; }
return pre; } };

每天一个开发小知识,今天你学废了吗?

以上是关于276.LeetCode | 234. 回文链表的主要内容,如果未能解决你的问题,请参考以下文章

javaleetcode234. 回文链表

javaleetcode234. 回文链表

leetcode 234 回文链表

234. 回文链表

LeetCode 234. 回文链表

LeetCode234:回文链表