剑指offer:两个链表的第一个公共结点
2018-04-05 本文已影响19人
衣介书生
题目分析
输入两个链表,找出它们的第一个公共结点。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
// 都为空或一个为空
if(pHead1 == null || pHead2 == null) {
return null;
}
// 统计两个链表的长度
int l1 = 0;
int l2 = 0;
ListNode temp1 = pHead1;
ListNode temp2 = pHead2;
while(temp1 != null) {
temp1 = temp1.next;
l1 ++;
}
while(temp2 != null) {
temp2 = temp2.next;
l2 ++;
}
// 让长链表先走两链表长度差的绝对值步
temp1 = pHead1;
temp2 = pHead2;
if(l1 >= l2) {
for(int i = 0; i < l1 - l2; i++) {
temp1 = temp1.next;
}
} else {
for(int i = 0; i < l2 - l1; i++) {
temp2 = temp2.next;
}
}
while(temp1 != null) {
if(temp1 == temp2) {
return temp1;
}
temp1 = temp1.next;
temp2 = temp2.next;
}
return null;
}
}