两个链表的第一个公共结点

题目描述

输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

思路

  1. 假设两个链表的第一个公共结点为c。
  2. 链表1可以表示为a+c,链表2可以表示为b+c。
  3. 可以通过a+c+b+c = b+c+a+c来快速求出c的值,若没有公共结点,那c便是null。
  4. 可以根据下图,简单理解下这个过程。

Java代码实现

public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        ListNode p1 = pHead1;
        ListNode p2 = pHead2;

        while(p1 != p2){
            p1 = (p1==null)?pHead2:p1.next;
            p2 = (p2==null)?pHead1:p2.next;
        }

        return p1;
    }
}

Golang代码实现

func getIntersectionNode(headA, headB *ListNode) *ListNode {
    pA,pB := headA,headB
    for headA != headB {
        if headA == nil{
            headA = pB
        }else {
            headA = headA.Next
        }
        if headB == nil{
            headB = pA
        }else {
            headB = headB.Next
        }
    }
    return headB
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:27
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务