美文网首页
华为OD机试真题2023_Swift_100_寻找链表的中间结点

华为OD机试真题2023_Swift_100_寻找链表的中间结点

作者: 雾中探雪 | 来源:发表于2023-03-12 23:23 被阅读0次
// 寻找链表的中间结点
    func HW2023019() {
        var listArr: [String] = []
        // 测试用例
//        let line1 = "00100 4"
//        listArr = ["00000 4 -1", "00100 1 12309", "33218 3 00000", "12309 2 33218"]
//        let line1 = "10000 3"
//        listArr = ["76892 7 12309", "12309 5 -1", "10000 1 76892"]
        //  开始代码
        let line1 = String(readLine()!)
        let inputArr = line1.components(separatedBy: " ")
        while let line = readLine() {
            listArr.append(String(line))
        }
        var nodeArr: [[String]] = []
        var headNode: Node? = nil
        for str in listArr {
            let temp = str.components(separatedBy: " ")
            if String(temp[0]) == String(inputArr[0]) {
                let nextNode: Node = Node.init(String(temp[2]), 0, Node())
                // 头部节点
                headNode = Node.init(String(temp[0]), Int(temp[1])!, nextNode)
            }else {
                nodeArr.append(temp)
            }
        }
        var node = headNode
        while node?.next?.addr != nil && node?.next?.data != nil {
            let addr = node?.next?.addr
            for (i,str) in nodeArr.enumerated() {
                if str[0] == addr {
                    var nextNode: Node? = nil
                    if str[2] != "-1" {
                        nextNode = Node.init(str[2], 0, Node())
                    }
                    node?.next = Node.init(String(str[0]), Int(str[1])!, nextNode ?? Node())
                    node = node?.next
                    nodeArr.remove(at: i)
                    break
                }
            }
        }
        
        var fast: Node? = headNode  // 快指针走两步
        var slow: Node? = headNode  // 慢指针走一步
        while fast != nil && fast?.next != nil {
            slow = slow?.next
            fast = fast?.next?.next
        }
        print(slow?.data ?? -1)
    }

class Node {
    var addr: String?
    var data: Int?
    var next: Node?
    public init() {
        self.addr = nil
        self.data = nil
        self.next = nil
    }
    public init(_ addr: String?, _ data: Int?, _ next: Node?) {
        self.addr = addr
        self.data = data
        self.next = next
    }
}

相关文章

  • 华为OD机试-磁盘容量排序

    今天参加华为OD机试,总共有两道机试题,每道题200分,总共400分,华为那边要求是两道题全过。第一道题是磁盘容量...

  • 力扣算法 - 链表的中间结点

    链表的中间结点 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回...

  • LeetCode 876. 链表的中间结点

    876. 链表的中间结点 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返...

  • LeetCode 链表 > 876. 链表的中间结点

    876.链表的中间结点给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第...

  • 876-链表的中间节点

    链表的中间节点 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回...

  • leecode 刷题(32)-- 链表的中间节点

    leecode 刷题(32)-- 链表的中间节点 描述: 给定一个带有头结点 head 的非空单链表,返回链表的中...

  • 快慢指针寻找链表中间结点

    声明: 转载文字或图片请在文首注明出处,3Q. 原理: 我们设置两个指针 slow 和 fast, slow 每...

  • 华为OD机试 :找终点

    1.题目大意 给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数。第一步必...

  • 链表-双指针妙用

    1.返回链表的中间节点 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回...

  • 234. 回文链表

    一. 题目: 二. 思路: 快慢指针找到中间结点,反转中间结点以后的链表 拿反转之后的链表和前面链表进行比较,如果...

网友评论

      本文标题:华为OD机试真题2023_Swift_100_寻找链表的中间结点

      本文链接:https://www.haomeiwen.com/subject/syjnldtx.html