面试题02.07.链表相交 Swift版本

This commit is contained in:
zhangrunzhe
2024-10-21 19:02:33 +08:00
parent c0c3ebb219
commit e0c1e2e317

View File

@ -535,6 +535,45 @@ public ListNode GetIntersectionNode(ListNode headA, ListNode headB)
} }
``` ```
### Swift
```swift
func getIntersectionNode(_ headA: ListNode?, _ headB: ListNode?) -> ListNode? {
var lenA = 0
var lenB = 0
var nodeA = headA
var nodeB = headB
// 计算链表A和链表B的长度
while nodeA != nil {
lenA += 1
nodeA = nodeA?.next
}
while nodeB != nil {
lenB += 1
nodeB = nodeB?.next
}
// 重置指针
nodeA = headA
nodeB = headB
// 如果链表A更长让它先走lenA-lenB步
if lenA > lenB {
for _ in 0..<(lenA - lenB) {
nodeA = nodeA?.next
}
} else if lenB > lenA {
// 如果链表B更长让它先走lenB-lenA步
for _ in 0..<(lenB - lenA) {
nodeB = nodeB?.next
}
}
// 同时遍历两个链表,寻找交点
while nodeA !== nodeB {
nodeA = nodeA?.next
nodeB = nodeB?.next
}
return nodeA
}
```
<p align="center"> <p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank"> <a href="https://programmercarl.com/other/kstar.html" target="_blank">