Swift – LeetCode – 回文链表

作者 : 开心源码 本文共955个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共170人阅读

题目

回文链表

问题:

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

进阶:

你是否用 O(n) 时间复杂度和 O(1) 空间复杂度处理此题?

示例:

示例 1:     输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true

解题思路:

我们首先想到的思路是通过建立一个list,而后将链表中的数存进去,而后判断这个list能否回文。但是这样做的空间复杂度是O(n),显然无法满足空间复杂度O(1)的需求。我们可以建立快慢指针,通过这两个指针取得两个列表,

代码:
/**public class SingNode {    public var value : Int    public var nextNode: SingNode?        public init(value:Int) {        self.value = value    }}extension SingNode : CustomStringConvertible {    public var description: String {        var string = "\(value)"        var node = self.nextNode                while node != nil {            string = string + " -- " + "\(node!.value)"            node = node?.nextNode        }        return string    }} **/      func isPalindrome(_ l1:SingNode?) -> Bool {        if l1 == nil || l1?.nextNode == nil {            return false        }                var fast = l1        var slow = l1        var nodeArr:[Int] = [Int]()        nodeArr.append(l1!.value)        while fast?.nextNode != nil && fast?.nextNode?.nextNode != nil {            slow = slow?.nextNode            fast = fast?.nextNode?.nextNode            nodeArr.append(slow!.value)        }                while slow?.nextNode != nil {            if nodeArr.count != 0 {                if nodeArr.removeLast() != slow?.nextNode?.value {                    return false                }            } else {                return false            }            slow = slow?.nextNode        }        return true    }    

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Swift – LeetCode – 回文链表

发表回复