剑指offer-36:两个链表的第一个公共结点
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&&tqId=11189&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
使用双指针法
考虑到两个链表的初始长度可能不同,因此需要通过一些手段对两个链表进行处理。
解决方法:a+b = b+a
当a链表循环结束,就开始循环b链表,弥补长度的不足,不影响代码执行结果
当b链表循环结束,就开始循环a链表,弥补长度的不足,不影响代码执行结果
a链表:4->1->8>-4->5
b链表: 5->0->1->8->4->5
图片上面和我的写法,我是将增加的链表放在后面,应该是:41845+501845,下面应该是501845+41845
公共节点是845
长度一致之后,采用双指针方法
代码:
function FindFirstCommonNode(pHead1, pHead2) { // write code here let p1 = pHead1 let p2 = pHead2 while(p1 != p2){ p1 = p1 ? p1.next : pHead2 p2 = p2 ? p2.next : pHead1 } return p1 }