兩個單鏈表相交的一系列問題
【題目】 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 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 思路 第一步判斷鍊錶有無環 通過雜湊表 例如 ...