打印两个有序链表的公共部分

打印两个有序链表的公共部分

一、题目

给定两个有序链表的头指针,打印两个链表的公共部分

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

Leetcode:https://leetcode.cn/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/

二、思路

如果两个链表有公共部分,说明两个链表相交。而且这两个链表有序。那么依次遍历即可

对于找到一个公共节点的问题。使用双指针的方式。

只有当链表 A 和 链表 B 都不为空时,两个链表才可能相交。因此首先判断链表 A 和 链表 B 是否为空,如果其中一个为空,则两个链表一定不相交,返回 nullptr

如果两个链表都不为空,如下代码所示,遍历完总能找到公共节点

三、code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (headA == nullptr || headB == nullptr) {
return nullptr;
}
ListNode* pa = headA, *pb = headB;
while (pa != pb) {
pa = pa == nullptr ? headB : pa->next;
pb = pb == nullptr ? headA : pb->next;
}
return pa;
}
};