思路:此题的意思是说,给你两个链表,让你找到这个链表的第一个公共结点,这里的第一个公共结点指的是,如果链表的当前结点相同,那么两个链表的后半部分将完全相同。此时我们就可以考虑这么一种情况:
我们将两个字符串按照图示的内容拼接起来,如果存在第一个节点,那么在 len(pHead1) + len(pHead2) 次内我们一定可以找到这么一个公共结点,如果没有这样一个公共结点,那么两个指针最后最终均指向 null。
/*
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;
ListNode p = pHead1, q = pHead2;
while(p != q) {
p = p.next;
q = q.next;
if(p != q) {//可能两个指针都指向了null
if(p == null) p = pHead2;
if(q == null) q = pHead1;
}
}
return p;
}
} //题解区简单写法
/*
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;
ListNode p = pHead1, q = pHead2;
while(p != q) {
p = p == null ? pHead2 : p.next;
q = q == null ? pHead1 : q.next;
}
return p;
}
} 
京公网安备 11010502036488号