• 回文链表


    请判断一个链表是否为回文链表。

    示例 1:
    
    输入: 1->2
    输出: false
    示例 2:
    
    输入: 1->2->2->1
    输出: true
    进阶:
    你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

    代码思路:

    不考虑空间复杂度的话,这道题其实很容易。但是一旦考虑了空间复杂度,就表示需要对原始链表进行操作。

    首先先利用快慢指针找到原始链表的中间,因为考虑到奇偶,所以slow指针需要往后走一位,保证需要反转的链表是跳过了奇数的中间位,然后再反转后面的链表。这个时候只要保证判断的后面链表不为空就可以了,前面的链表我不管。而且快指针有没有走到头我也不用管,反正一旦不能走了我慢指针一定是在中间的前一位。

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def isPalindrome(self, head):
            """
            :type head: ListNode
            :rtype: bool
            """
    
            if not head or not head.next:
                return True
            slow=fast=head
            while fast.next and fast.next.next:
                
                slow=slow.next
                fast=fast.next.next
                
            
            slow=self.reverseList(slow.next)
            
            while slow:
                if head.val != slow.val:
                    return False
                slow=slow.next
                head=head.next
            return True
        
        
        def reverseList(self, head):
            new_head = None
            while head:
                p = head
                head = head.next
                p.next = new_head
                new_head = p
            return new_head
            
  • 相关阅读:
    正则 匹配 HTML 标签
    webpack 打包图片 能否提高加载速度
    禁止手机浏览器左右滑屏 后退 前进
    Objective-C--@property,@synthesize关键字介绍
    ios--绘图介绍
    iOS--为视图添加阴影
    iOS--iOS7摄像头识别二维码功能
    iOS--日历事件的获取和添加
    iOS-#ifdef DEBUG代码块介绍
    如何将你的程序打包成ipa
  • 原文地址:https://www.cnblogs.com/guangluwutu/p/10697400.html
Copyright © 2020-2023  润新知