public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
//9.输入两个链表,找出它们的第一个公共结点.
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// 1. 分别求两个链表的长度
int lenA = size(headA);
int lenB = size(headB);
// 2. 让长的链表先走长度的差值步
if (lenA > lenB){
int offset = lenA - lenB;
for (int i = 0; i < offset; i++) {
headA = headA.next;
}
}else {
int offset = lenB - lenA;
for (int i = 0; i < offset; i++) {
headB = headB.next;
}
}
// 3. 分别让两个链表的节点同时移动, 比较节点是否是相同节点
while (headA != null && headB != null){
// 比较对象的身份(地址)
if (headA == headB){
return headA;
}
headA = headA.next;
headB = headB.next;
}
return null;
}
//计算链表的长度
public int size(ListNode head){
int size = 0;
//遍历链表,获取长度
for (ListNode cur = head;cur != null;cur = cur.next) {
size++;
}
return size;
}
输入两个链表,找出它们的第一个公共结点.
最新推荐文章于 2022-05-31 20:07:52 发布