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

题目描述

输入两个链表,找出它们的第一个公共结点。

先分别遍历链表1和链表2的长度,设长度差为n。长的先走n步,再和短的一起走,得到两个链表的第一个公共节点。

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    unsigned int GetLength(ListNode* Node)
        {
        unsigned int length=0;
        ListNode* pNode=Node;
        while(pNode!=NULL)
            {
            ++length;
            pNode=pNode->next;
        }
        return length;
    }
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        unsigned int length1=GetLength(pHead1);
        unsigned int length2=GetLength(pHead2);
        int dislength=length1-length2;
        ListNode* pListNodeLong=pHead1;
        ListNode* pListNodeShort=pHead2;
        if(length2>length1)
            {
             pListNodeLong=pHead2;
             pListNodeShort=pHead1;
             dislength=length2-length1;
        }
      //   pListNodeLong=(length2>=length1)?pHead2:pHead1;
      //  pListNodeShort=(length2<length1)?pHead2:pHead1;
        for(int i=0;i<dislength;++i)
            pListNodeLong=pListNodeLong->next;
        while((pListNodeLong!=NULL)&&(pListNodeShort!=NULL)&&(pListNodeLong!=pListNodeShort))
            {
            pListNodeLong=pListNodeLong->next;
            pListNodeShort=pListNodeShort->next;
        }
        ListNode* pFirst=pListNodeLong;
        return pFirst;
    }
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值