码迷,mamicode.com
首页 > 编程语言 > 详细

剑指Offer-35.两个链表的第一个公共结点(C++/Java)

时间:2019-12-05 22:25:45      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:off   class   else   div   style   nullptr   null   while   ++   

题目:

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

分析:

先统计两个链表的长度,计算他们的差值,然后将两个链表对齐,再去寻找公共节点即可。

程序:

C++

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        int d1 = 0;
        int d2 = 0;
        int d = 0;
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        while(p1 != nullptr){
            p1 = p1->next;
            d1++;
        }
        while(p2 != nullptr){
            p2 = p2->next;
            d2++;
        }
        if(d1 < d2){
            d = d2 - d1;
            while(d--){
                pHead2 = pHead2->next;
            }
        }
        else{
            d = d1 - d2;
            while(d--){
                pHead1 = pHead1->next;
            }
        }
        while(pHead1 != nullptr && pHead2 != nullptr){
            if(pHead1 == pHead2){
                return pHead1;
            }
            pHead1 = pHead1->next;
            pHead2 = pHead2->next;
        }
        return nullptr;
    }
};

Java

public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        int d1 = 0;
        int d2 = 0;
        int d = 0;
        ListNode p1 = pHead1;
        ListNode p2 = pHead2;
        while(p1 != null){
            p1 = p1.next;
            d1++;
        }
        while(p2 != null){
            p2 = p2.next;
            d2++;
        }
        if(d1 < d2){
            d = d2 - d1;
            while(d-- != 0){
                pHead2 = pHead2.next;
            }
        }
        else{
            d = d1 - d2;
            while(d-- != 0){
                pHead1 = pHead1.next;
            }
        }
        while(pHead1 != null && pHead2 != null){
            if(pHead1 == pHead2){
                return pHead1;
            }
            pHead1 = pHead1.next;
            pHead2 = pHead2.next;
        }
        return null;
    }
}

 

剑指Offer-35.两个链表的第一个公共结点(C++/Java)

标签:off   class   else   div   style   nullptr   null   while   ++   

原文地址:https://www.cnblogs.com/silentteller/p/11991872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!