【时间空间效率的平衡】两个链表的第一个公共结点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ghscarecrow/article/details/82119242

此题出自牛客网的剑指offer专题

题目描述

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

解题思路

对于这道题,有一个坑就是可能会有人觉得是要找到结点中存储的value值相等的结点。。。然而,其实这道题的意思是找到第一个公共结点,是指属于同一个内存空间的结点。明白了要求之后,这道题就很容易解决了,我们只需要定义两个工作指针来接收传进来的指针再不停地进行迭代判断结点是否相同直至两个结点相同。

代码实现

Java版本

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1==null || pHead2==null)
        {
            return null;
        }
        ListNode p1 = pHead1;
        ListNode p2 = pHead2;
        while(p1!=p2){
            p1 = p1==null? pHead2:p1.next;
            p2 = p2==null? pHead1:p2.next;
        }
        return p1;
    }
}

C++版本

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(pHead1==NULL||pHead2==NULL)
        {
            return NULL;
        }
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        while(p1!=p2)
        {
            p1 = p1==NULL? pHead2:p1->next;
            p2 = p2==NULL? pHead1:p2->next;
        }
        return p1;
    }
};

猜你喜欢

转载自blog.csdn.net/ghscarecrow/article/details/82119242