華為OD機(jī)試真題2023_Swift_100_尋找鏈表的中間結(jié)點(diǎn)

// 尋找鏈表的中間結(jié)點(diǎn)
    func HW2023019() {
        var listArr: [String] = []
        // 測(cè)試用例
//        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"]
        //  開(kāi)始代碼
        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())
                // 頭部節(jié)點(diǎn)
                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
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容