输入两个链表,找出它们的第一个公共结点。
学习了一叶浮尘的题解自己整理了一下,在此感谢大佬~
注意链表节点相同表示该节点的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; } }