版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
};