首页 > 其他分享 >234. 回文链表

234. 回文链表

时间:2024-09-11 22:13:07浏览次数:1  
标签:head cur fast next 链表 second 234 first 回文

题目链接 234. 回文链表
思路 链表综合题:快慢指针 + 指针翻转
题解链接 官方题解
关键点 while fast.next and fast.next.next: ...
时间复杂度 \(O(n)\)
空间复杂度 \(O(1)\)

代码实现:

class Solution:
    def isPalindrome(self, head: Optional[ListNode]) -> bool:
        if head is None:
            return True
        first = self.halfList(head)
        second = self.reverseList(first.next)

        answer = True
        cur_first, cur_second = head, second
        while answer and cur_second:
            if cur_first.val != cur_second.val:
                answer = False
                break
            cur_first = cur_first.next
            cur_second = cur_second.next
        first.next = self.reverseList(second)
        return answer
    
    def halfList(self, head):
        slow = fast = head
        while fast.next and fast.next.next:
            fast = fast.next.next
            slow = slow.next
        return slow
    
    def reverseList(self, head):
        previous = None
        current = head
        while current:
            next_node = current.next
            current.next = previous
            previous = current
            current = next_node
        return previous

标签:head,cur,fast,next,链表,second,234,first,回文
From: https://www.cnblogs.com/WrRan/p/18409115

相关文章

  • 876. 链表的中间结点
    题目链接876.链表的中间结点思路快慢指针-经典应用题题解链接没想明白?一个视频讲透!(Python/Java/C++/Go/JS/Rust)关键点whilefastandfast.next:...时间复杂度\(O(n)\)空间复杂度\(O(1)\)代码实现:classSolution:defmiddleNode(self,head......
  • 单链表的删除和插入
    问题描述设计算法,实现单链表的删除和插入操作。输入描述输入共三行,第一行输入由空格分隔的若干个整数(以9999结束),表示单链表的元素,9999不算单链表的元素,利用尾插法建立单链表;第二行一个整数i,代表删除元素的位置,完成单链表的删除操作;第三行有两个整数j和k,分别代表插入元素......
  • LeetCode Hot100刷题记录-141.环形链表
    给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递。仅仅是为了标识链表的......
  • LeetCode Hot100刷题记录-234.回文链表
    题目:给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。PS:回文序列是向前和向后读都相同的序列。解题思路:遍历链表,将每个元素存放入一个新的数组中。遍历完成后,再用两个指针前后遍历数组来判断两个数字是否相等。/***Def......
  • c语言--力扣简单题目(删除排序链表中的重复元素)讲解
    题目如下:给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围[0,300]内-100<=Node.val<=100题目数据保......
  • 重头开始嵌入式第三十七天(数据结构 链表)
    单向链表单向链表是一种常见的数据结构。一、结构组成-节点:单向链表由多个节点组成。每个节点包含两个部分,一个是存储数据的部分,可以存储各种类型的数据,如整数、字符、结构体等;另一个是指向下一个节点的指针,用于连接链表中的各个节点。-头指针:链表有一个特殊的指针称为头......
  • 数据结构—链表
    一:链表1、数组是连续的内存空间;而链表可以不一定是连续的内存空间2、单端链表;从前一个元素指向后一个元素3、链表的功能(1)访问o(n):数组是通过下表或者索引访问元素;链表是通过next指针以此递归的进行查询判断(2)搜索o(n):从头部遍历;知道找到位置(3)插入o(1):(4)删除o(1):4、特......
  • 每日算法随笔:反转链表 II
    明白了!下面我将基于你给的两种方法来详细解释题解,并展示每一步的变化过程。题解:反转链表II这道题要求我们反转链表中从第left个节点到第right个节点的部分,返回反转后的链表。我们会使用两种方法:递归和迭代。示例解析示例1:输入:head=[1,2,3,4,5],left=2,ri......
  • 每日算法随笔:反转链表
    题解:反转链表这道题目要求我们将一个单链表进行反转,返回反转后的链表。链表的反转可以通过迭代和递归两种方法来实现。下面我们将详细解释这两种方法,并通过例子演示每一步的变化过程。方法一:迭代法思路:我们用三个指针来完成链表的反转:prev表示前一个节点,curr表示当前节......
  • Java-实现双向环形链表
            双向链表是一种常用的数据结构,其特点是每个节点不仅包含数据,还持有指向前一个节点和后一个节点的指针。与普通双向链表不同的是,它的哨兵节点的prev指向最后一个元素,而最后一个元素的next指向哨兵。        具体双向普通链表可以参考我的上篇文章,这里......