zoukankan      html  css  js  c++  java
  • 234. 回文链表(leetcode)链表 / 链表反转

       

    思路: 来自https://leetcode-cn.com/problems/palindrome-linked-list/solution/zhong-dian-fan-zhuan-dui-bi-by-powcai/

        例: 1->2->3->2->1

      1.先用双指针找到中点上界。

        即:找到第四个节点 2

      2.反转后半个链表

        即:1->2->3->1->2

      3.判断前后半段链表是否相等,如果是奇数个则不管中间值

        即判断 1,2 == 1,2

    注意:

      # 双节点法时:

      1.双节点找中间节点时的条件是 while fast and fast.next,为什么不需要fast.next.next呢。 这是因为访问fast.next.next,存在fast.next即可,因为node存在默认的next: node.next = None

      2.奇数节点时需要 slow = slow.next。理由如下

        1->2->3->2->1

      fast  1        1         1

      slow 1   1   1

      # 后半段链表反转时:

          1->2->3->2->1->None

          1->2->3     None <- 2 <- 1 <- None

      3. 注意经过最后一步的变化后,preNext对应1,而不是想当然的curNode,此时curNode对应右边的None

    代码:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        def isPalindrome(self, head: ListNode) -> bool:
            fast = slow = head
            while fast and fast.next:
                fast = fast.next.next
                slow = slow.next
            # 如果是奇数,则取上界 fast=5 slow=3 -> slow = 4
            # 如果是偶数,fast = None(7) slow = 4 已经是上界了
            if fast:
                slow = slow.next
            preNext = None
            curNode = slow
            while curNode:
                curNext = curNode.next
                curNode.next = preNext
                preNext = curNode
                curNode = curNext
            while preNext and head:
                if preNext.val != head.val:
                    return False
                preNext = preNext.next
                head = head.next
            return True
  • 相关阅读:
    Redis慢查询日志
    Docker:容器
    CentOS7.X中使用yum安装nginx
    Nginx简介及配置详解(二)
    Nginx简介及配置详解(一)
    Redis持久化策略
    golang学习笔记——异常
    golang学习笔记——面向对象(接口)
    golang学习笔记——面向对象(方法)
    golang学习笔记——struct结构体
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12721539.html
Copyright © 2011-2022 走看看