class Node {
int num;
Node next;
public Node(int num) {
this.num = num;
}
}
public class LinkFirstNode {
public static void main(String[] args) {
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
Node node7 = new Node(7);
Node node8 = new Node(8);
node1.next = node2;
node2.next = node3;
node3.next = node6;
node4.next = node5;
node5.next = node6;
node6.next = node7;
node7.next = node8;
Node cross = findCrossNode(node1,node4);
System.out.println(cross.num);
}
public static Node findCrossNode(Node nodeA, Node nodeB) {
Node tp1 = nodeA;
Node tp2 = nodeB;
int lenghA = length(nodeA);
int lenghB = length(nodeB);
if (lenghA > lenghB) {
int cha = lenghA - lenghB;
for (int i = 0; i < cha; i++) {
tp1 = nodeA.next;
}
tp2 = nodeB;
} else {
int cha = lenghB - lenghA;
for (int i = 0; i < cha; i++) {
tp2 = nodeB.next;
}
tp1 = nodeA;
}
while (tp1 != null && tp2 != null) {
if (tp1 == tp2) {
return tp1;
} else {
tp1 = tp1.next;
tp2 = tp2.next;
}
}
return null;
}
public static int length(Node node) {
int sum = 0;
while (node != null) {
sum++;
node = node.next;
}
return sum;
}
}
【算法题】求两个链表第一个交点
最新推荐文章于 2023-07-29 23:09:31 发布