Leetcode 160 Intersection of Two Linked Lists

题意

给定两个链表,找这两个链表第一个公共节点,如果没有返回nullptr

题目链接

https://leetcode.com/problems/intersection-of-two-linked-lists/description/

题解

两个指针分别从两个链表(记录为表A,表B)的表头出发,并且记录到表尾移动的步数,得到两个指针移动的步数之差 x x x。步数之差为正数,那么把表A的指针移动 x x x步,否则移动表B的指针 − x -x −x步。然后两个指针移动到表尾,得到答案。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *p1 = headA;
        ListNode *p2 = headB;
        int cnt1 = 0;
        int cnt2 = 0;
        while(p1) {
            p1 = p1->next;
            cnt1++;
        }
        while(p2) {
            p2 = p2->next;
            cnt2++;
        }
        p1 = headA;
        p2 = headB;
        int cnt3 = abs(cnt1 - cnt2);
        if(cnt1 >= cnt2) {
            for(int i = 0; i < cnt3; i++) {
                p1 = p1->next;
            }
        } else {
            for(int i = 0; i < cnt3; i++) {
                p2 = p2->next;
            }            
        }
        while(p1 != p2 && p1 != nullptr) {
            p1 = p1->next;
            p2 = p2->next;
        }
        return p1 == nullptr ? nullptr : p1;
    }
};

算法复杂度: O ( m + n ) O(m+n) O(m+n), m m m, n n n分别为两个表的长度

空间复杂度: O ( 1 ) O(1) O(1)

相关推荐
hairenwangmiao8 分钟前
B4041 [GESP202409 四级] 区间排序
算法·排序
人道领域18 分钟前
【LeetCode刷题日记】47.全排列Ⅱ
java·开发语言·算法·leetcode
漂流瓶jz20 分钟前
UVA-1606 两亲性分子 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·向量·aoapc·算法竞赛入门经典·atan2·浮点
Navigator_Z22 分钟前
LeetCode //C - 1095. Find in Mountain Array
c语言·算法·leetcode
不会就选b1 小时前
算法日常・每日刷题--<二分查找>1
算法
「維他檸檬茶」1 小时前
大模型算法学习2026.6.13
学习·算法
叫我:松哥1 小时前
基于Python的共享单车租赁数据分析与预测系统,技术栈flask+boostrap+随机森林+XGBoost
人工智能·python·深度学习·算法·随机森林·数据分析·flask
BAGAE1 小时前
星链卫星数据获取:从太空安全到实时通信的技术革命
网络·数据结构·数据库·算法·云计算·hbase
happymaker06261 小时前
LeetCodeHor100——438.找到字符串中所有的字母异位词
算法
西安邮电大学1 小时前
有关栈的经典算法题
java·后端·其他·算法·面试