題目:輸入兩個鍊錶,找出它們的第乙個公共節點。
def first_common_node(head1,head2):p1,p2 = head1,head2
cnt1,cnt2=0,0
while p1:
cnt1 +=1
p1=p1.next
while p2:
cnt2 +=1
p2=p2.next
p1, p2 = head1, head2
if cnt1>cnt2:
for i in range(cnt1-cnt2):
p1=p1.next
if cnt2>cnt1:
for i in range(cnt2-cnt1):
p2=p2.next
while p1.data!=p2.data:
p1=p1.next
p2=p2.next
return p1
注:要找出兩個鍊錶第乙個公共節點,只要讓兩個鍊錶在各自某個節點之後長度一致,然後一起往後遍歷,當遇到兩個節點相同時,即為第乙個公共節點。所以首先算出兩個鍊錶的長度,然後讓長的鍊錶先走,使其剩餘長度等於另乙個鍊錶,然後一起遍歷即可。
第二種方法為用兩個棧儲存兩個鍊錶,然後兩個棧做彈出操作,判斷兩個棧彈出的節點是否相同,最後乙個相同的節點為兩個鍊錶第乙個公共節點。
52 兩個鍊錶的第乙個公共節點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 reference of the node with v...
鍊錶 52題 兩個鍊錶的第乙個公共節點
輸入兩個鍊錶,找出它們的第乙個公共節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 reference of the node with value 8...
兩個鍊錶第乙個公共節點
先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...