C Python 求兩個鍊錶的交點

2021-10-03 06:02:19 字數 2907 閱讀 2091

**

已知鍊錶a的頭節點指標heada,鍊錶b的頭節點指標headb。

兩個鍊錶相交,求兩鍊錶交點對應的節點

如果兩個鍊錶沒有交點,則返回null;

在求交點的過程中,不可以破壞鍊錶的結構或者修改鍊錶的資料域;

可以確保傳入的鍊錶a與鍊錶b沒有任何環;

實現演算法盡可能時間複雜度o(n),空間複雜度o(1)

#include

#include

using

namespace std;

struct listnode

//建構函式};

/*// 方法一。runtime: 76 ms, memory usage: 20.1 mb。時間複雜度為o(nlogn),空間複雜度為o(n)

class solution

~solution(){}

listnode* getintersectionnode(listnode* heada, listnode* headb)

while (headb)

headb = headb->next;

} return null;

}};*///方法二。runtime: 52 ms, memory usage: 16.8 mb。

intget_list_length

(listnode* head)

return len;

}listnode*

forward_long_list

(int long_len,

int short_len, listnode* head)

return head;

}class

solution

~solution()

listnode*

getintersectionnode

(listnode* heada, listnode* headb)

else

while

(heada&&headb)

heada = heada-

>next;

headb = headb-

>next;

}return

null;}

};intmain()

執行結果為:6**

輸入兩個鍊錶,找出它們的第乙個公共節點

# -*- coding:utf-8 -*-

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

findfirstcommonnode

(self, phead1, phead2)

:def

findequal

(shortpointer, longpointer, shorthead, longhead)

: k =

0while longpointer:

longpointer = longpointer.

next

k +=

1 shortpointer = shorthead

longpointer = longhead

for i in

range

(k):

longpointer = longpointer.

next

while shortpointer != longpointer:

shortpointer = shortpointer.

next

longpointer = longpointer.

next

return shortpointer

ptmp1 = phead1

ptmp2 = phead2

while ptmp1 and ptmp2:

# 當兩個鍊錶的長度相同時

if ptmp1 == ptmp2:

return ptmp2

ptmp1 = ptmp1.

next

ptmp2 = ptmp2.

next

if ptmp1:

return findequal(ptmp2, ptmp1, phead2, phead1)

if ptmp2:

return findequal(ptmp1, ptmp2, phead1, phead2)

if __name__ ==

'__main__'

: a1 = listnode(1)

a2 = listnode(2)

b1 = listnode(3)

b2 = listnode(4)

b3 = listnode(5)

c1 = listnode(6)

c2 = listnode(7)

c3 = listnode(8)

a1.next

= a2

a2.next

= c1

c1.next

= c2

c2.next

= c3

b1.next

= b2

b2.next

= b3

b3.next

= c1

s = solution(

)print

(s.findfirstcommonnode(a1, b1)

.val)

執行結果為:

6

求兩個單向鍊錶的交點

題目 給出兩個單向鍊錶,判斷其是否有交點 如果存在交點,請找出交點 解題思路 如果存在交點,則兩個鍊錶的節點結構必定是同構的 如果存在交點,則兩個鍊錶必定程式y字形,而不可能是x形 如果存在交點,兩個鍊錶在交點及其之後的部分是一致的 這點很關鍵,一致的意思包括兩部分 長度和內容。基於以上三點,可以給...

求兩個交叉鍊錶的交點

如果兩個鍊錶相交,又都不存在環,那麼從第乙個相交點開始之後的結點都相同 構成了乙個y型 因此,只要分別遍歷這兩個鍊錶,找到末尾結點,如果末尾結點相同,即可確認相交。如果要求這種情況的交點,由於相交部分全部都相同,所以彼此的長度差異存在於相交之前的部分。因此,只需要先得到兩個鍊錶的差d,然後將較長的鍊...

C 求兩個鍊錶的交點

int main int b lenb for int i 0 i lena i for int i 0 i lenb i return0 結果 b 3 3 in array a.b 4 1 in array a.b 7 1 in array a.演算法寫在乙個類裡 class solution w...