标签:剑指offer 题解 one imp isp 移动 val detail href
题目描述:
? 请判断一个链表是否为回文链表。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
import copy
class Solution:
def isPalindrome(self, head) -> bool:
if head is None:
return True
# 反转链表
last = None #指向上一个节点
# Head = head
Head=copy.deepcopy(head)
while head:
#先用tmp保存head的下一个节点的信息,
#保证单链表不会因为失去head节点的next而就此断裂
tmp = head.next
#保存完next,就可以让head的next指向last了
head.next = last
#让last,head依次向后移动一个节点,继续下一次的指针反转
last = head
head = tmp
while Head is not None:
if Head.val != last.val:
return False
Head = Head.next
last = last.next
return True
自己的想法:
使用反转链表进行获得反向的链表
进行和初始链表进行值的比较,不同则不是回文链表
为什么error:
- 链表直接赋“=”,之后初始链表变化,复制的链表也会变化
解题思路:
感想:
被所有人打败,太慢了,得优化优化,再优化。看看大佬的解题思路。
整个流程可以分为以下五个步骤:
- 找到前半部分链表的尾节点。
- 反转后半部分链表。
- 判断是否回文。
- 恢复链表。
- 返回结果。
至少比我快很多。
标签:剑指offer 题解 one imp isp 移动 val detail href
原文地址:https://www.cnblogs.com/fanyaochi/p/14635986.html