两个有环链表,返回第一个相交节点,如果不相交返回 NULL
public Node bothLoop(Node head1, Node loop1, Node head2, Node loop2) {
Node cur1 = null, cur2 = null;
if (loop1 == loop2) {
// 此情况下 解决相交点在环外 就是 两个链表都无环,返回第一个相交节点,如果不相交,返回null
cur1 = head1;
cur2 = head2;
int n = 0;
while (cur1 != loop1) {
n++;
cur1 = cur1.next;
}
while (cur2 != loop2) {
n--;
cur2 = cur2.next;
}
cur1 = n > 0 ? head1 : head2;
cur2 = cur1 == head1 ? head2 : head1;
n = Math.abs(n);
while (n != 0) {
n--;
cur1 = cur1.next;
}
while (cur1 != cur2) {
cur1 = cur1.next;
cur2 = cur2.next;
}
return cur1;
} else {
// 此情况解决 两个环链表不相交 或 相交在同一个环中
cur1 = loop1.next;
while (cur1 != loop1) {
if (cur1 == loop2)
return loop1;
cur1 = cur1.next;
}
return null;
}
}
C++ | Java |
---|