输入两个链表,找出它们的第一个公共结点。
学习了一叶浮尘的题解自己整理了一下,在此感谢大佬~
注意链表节点相同表示该节点的value和next均相同,故一旦两个链表有相同节点,则自该节点起,后面的链表均相同。
该问题下两个链表的遍历和比较,主要是需要让两个链表长度相同。故直接将p2加在p1后面,p1加在p2后面即可:
p1:5个不同节点+3个相同节点
P2:2个不同节点+3个相同节点
new p1:5+3+2+3
new p2:2+3+5+3
由此可见最后第一次出现p1 = p2的节点即为两个链表的交点。
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1 == null || pHead2 == null) return null;
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while (p1 != p2) {
p1 = p1.next;
p2 = p2.next;
if (p1 != p2 && p1 == null) {
p1 = pHead2;
}
if (p1 != p2 && p2 == null) {
p2 = pHead1;
}
}
return p1;
}
}
京公网安备 11010502036488号