题目链接
https://leetcode.com/problems/palindrome-linked-list/
题目原文
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
题目翻译
给定一个单链表,判断是否是“ 回文链表”。
进一步:你能在时间复杂度 O(n) 和空间复杂度 O(1) 下完成该问题吗?
思路方法
从解决这个问题的角度,方法应该是挺多的,但要满足题目时间和空间复杂度的要求,就要排除一些方法。
但是本题要AC的话不一定需要满足复杂度要求。所以下面这篇文章,我会把我知道的方法都大概说明一下,以下代码均可AC(效率不保证)。
思路一
考虑到单链表缺失从后向前的信息,如果能得到双向信息将很容易判断回文。故考虑将单链表的节点值记录到一个数组中,判断数组是否回文;或通过一次遍历将单链表拓展成双向链表,再判断是否回文。
下面的代码用的数组判断。
代码(时间 O(n),空间O(n))
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def isPalindrome