一、题目描述
请判断一个链表是否为回文链表。
示例 1:
1 | 输入: 1->2 |
示例 2:
1 | 输入: 1->2->2->1 |
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
二、题解
1.算法描述
- 遍历+双指针
- 快慢指针+翻转链表
2.个人分析
我使用的是第一种算法,首先,遍历整个链表,将所有元素存到数组中,然后使用头尾指针判断数组即可。
但是这种算法不是最优的,时空复杂度均为O(n)
- 第二种算法,首先使用快慢指针找到链表的中点(做过),再将后半段链表翻转,并与前半段链表比较即可。
3.代码
1 | bool isPalindrome(struct ListNode *head) |