Swift - LeetCode - 連結串列元件
題目
連結串列元件
問題:
給定一個連結串列(連結串列結點包含一個整型值)的頭結點 head。同時給定列表 G,該列表是上述連結串列中整型值的一個子集。返回列表 G 中元件的個數,這裡對元件的定義為:連結串列中一段最長連續結點的值(該值必須在列表 G 中)構成的集合。
說明:
應當保持奇數節點和偶數節點的相對順序。
連結串列的第一個節點視為奇數節點,第二個節點視為偶數節點,以此類推。
示例:
示例 1: head: 0->1->2->3 G = [0, 1, 3] 輸出: 2 解釋: 連結串列中,0 和 1 是相連線的,且 G 中不包含 2,所以 [0, 1] 是 G 的一個元件,同理 [3] 也是一個元件,故返回 2。 示例 2: 輸入: head: 0->1->2->3->4 G = [0, 3, 1, 4] 輸出: 2 解釋: 連結串列中,0 和 1 是相連線的,3 和 4 是相連線的,所以 [0, 1] 和 [3, 4] 是兩個元件,故返回 2。
解題思路:
用指標p表示當前連結串列結點,p一開始為head頭結點,我們從G中挨個遍歷,如果能找到,說明p的val在G中存在,這時,把p後移一個,即p=p->next,再在G(從G[0]到G[n-1])中找p的值,如果找到,同樣進香行操作,直到在中找不到p->val為止。此時,元件的個數加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 numComponents(_ l1:SingNode?,_ intArr:[Int]?) -> Int { if l1 == nil || intArr == nil { return 0 } var number = 0 var head = l1 var t = 0 while head != nil { if(intArr!.contains(head!.value)) { t += 1 if head?.nextNode == nil { number = number + 1 } } else { if t > 0 { number = number + 1 } t = 0 } head = head?.nextNode } return number }