题目
请判断一个链表是否为回文链表。
示例 1:
1 | 输入: 1->2 |
示例 2:
1 | 输入: 1->2->2->1 |
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
Given a singly linked list, determine if it is a palindrome.
Example 1:
1 | Input: 1->2 |
Example 2:
1 | Input: 1->2->2->1 |
Follow up:
Could you do it in O(n) time and O(1) space?
解题方法
反转链表
新建一个原来链表的反转链表,然后将两个链表节点逐一比较,O(n)时间复杂度,O(n)空间复杂度,可以不破坏原链表。这段代码跑了2ms,超过了78.51%的Java提交。
1 | class Solution { |
反转一半
先扫描一次链表得到链表长度,然后翻转链表前半部分,然后前后两部分进行比较,需要注意的是,长度为奇数时,中间节点可以跳过。时间复杂度O(n),空间复杂度O(1),但是会破坏原链表。这段代码跑了1ms,超过了98.12%的Java提交。
1 | class Solution { |