兩個單鏈表相交的一系列問題

2021-09-07 19:28:38 字數 1842 閱讀 6460

兩個單鏈表相交的一系列問題

【題目】 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式, 如果兩個鍊錶相交,請返回相交的第乙個節點;如果不相交,返回null 即可。

要求:如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o(n+m),額外空間複雜度請達到o(1)。

public

class

findfirstintersectnode

}public

static node getintersectnode

(node head1, node head2)

node loop1 =

getloopnode

(head1)

; node loop2 =

getloopnode

(head2)

;//兩個單鏈表相交分為三種情況,兩個單鏈表都無環,乙個有環乙個無環,兩個都有環,其中乙個有環乙個無環肯定不能相交,返回null。

if(loop1 == null && loop2 == null)

if(loop1 != null && loop2 != null)

return null;

}//判斷單鏈表有沒有環,如果有環,獲得入環節點

public

static node getloopnode

(node head)

node n1 = head.next;

node n2 = head.next.next;

while

(n1 != n2)

n1 = n1.next;

n2 = n2.next.next;

} n2 = head;

while

(n1 != n2)

return n1;

}//兩個無環單鏈表相交

public

static node noloop

(node head1, node head2)

node cur1 = head1;

node cur2 = head2;

int n =0;

while

(cur1 != null)

while

(cur2 != null)

if(cur1 != cur2)

cur1 = n >

0? head1 : head2;

cur2 = cur1 == head1 ? head2 : head1;

n = math.

abs(n)

;while

(n !=0)

while

(cur1 != cur2)

return cur1;

}//兩個有環單鏈表相交

public

static node bothloop

(node head1, node loop1, node head2, node loop2)

while

(cur2 != loop2)

cur1 = n >

0? head1 : head2;

cur2 = cur1 == head1 ? head2 : head1;

n = math.

abs(n)

;while

(n !=0)

while

(cur1 != cur2)

return cur1;

}else

cur1 = cur1.next;

}return null;

}}

兩個單鏈表相交的一系列問題

兩個單鏈表相交的一系列問題 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1 和 head2,這兩個鍊錶可能相交,也可能 不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回 null 即可。如果鍊錶 1 的長度為 n,鍊錶 2 的長度為 m,時...

兩個單鏈表相交的一系列問題

在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o n m 額外空間複雜度...

兩個單鏈表相交的一系列問題

題目 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭結點head1和head2,這兩個鍊錶可能相交,也可能不相交,請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null。要求 時間複雜度o n m 空間複雜度o 1 思路 第一步判斷鍊錶有無環 通過雜湊表 例如 ...