题目
输入两个链表,找出他们的第一个公共节点(两个链表会在公共节点处交汇,之后的元素都相同)
leetcode链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/
思路
- 利用栈的特性,先存入两个链表的节点,然后从两个链表的尾部元素开始,找到最后一个相同的元素
- 遍历两个链表,得出分别是多长,然后长的先走相差的步数,最后一起走,到达第一个相同的元素
代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function (headA, headB) {
if (!headA || !headB) return null
let countsA = 0
let countsB = 0
let nodeA = headA
let nodeB = headB
while(nodeA) {
countsA++
nodeA = nodeA.next
}
while(nodeB) {
countsB++
nodeB = nodeB.next
}
let de = Math.abs(countsA - countsB)
while(de--) {
if (countsA > countsB) {
headA = headA.next
} else {
headB = headB.next
}
}
nodeA = headA
nodeB = headB
while (nodeA && nodeB) {
if (nodeA === nodeB) return nodeA
nodeA = nodeA.next
nodeB = nodeB.next
}
return null
}