// 尋找鏈表的中間結(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ù)。