cubegao

Swift.两个链表的第一个公共结点

2016-04-05

题目描述:输入两个链表,找出它们的第一个公共结点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import Foundation

class For37Solution {
func findFirstCommonNode(_ head1: ListNode?,_ head2: ListNode?) -> ListNode {

var pHead = head1
var qHead = head2

var pLen = 0
var qLen = 0

while pHead?.next != nil {
pHead = pHead?.next
pLen += 1
}

while qHead?.next != nil {
qHead = qHead?.next
qLen += 1
}

var pHead1 = head1
var qHead2 = head2
var len = pLen - qLen
if len > 0 {
while len >= 0 {
pHead1 = pHead1?.next
len -= 1
}
}else {
len = -len
while len >= 0 {
qHead2 = qHead2?.next
len -= 1
}
}

while pHead1?.next != nil && qHead2?.next != nil {

if pHead1 === qHead2 {
return pHead1!
}

pHead1 = pHead1?.next
qHead2 = qHead2?.next
}


//没有公共结点
return ListNode(0)

}
}

算法思想:先算出两个链表的长度,假如差为K,长的链表先走K步,然后两个指针一起走,如果相遇就是第一个公共节点。如果没有相遇就没有公共节点。

github地址:https://github.com/cubegao/LeetCode

Tags: 算法

扫描二维码,分享此文章