LeetCode: 160.相交链表(令人赞叹的优雅)

160. 相交链表 - 力扣(LeetCode)

目录

官方双指针解法:

博主的辣眼代码:

每日一表情包:


博主还未学习哈希表,所以介绍的是双指针法,此题的哈希表解法时O(n+m)空O(m)

而今天的这个双指针的解法时O(n+m)O(1) ,绝对值得你细细品味,

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台(官方的解释)

我在这里也不好说啥,双指针解法易想,但是这些细节真的很难抓住,让我们来欣赏吧(欣赏前建议自己写写)

官方双指针解法:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    if(headA == NULL || headB == NULL){
        return NULL;
    }
    struct ListNode* pa = headA, *pb = headB;
    while(pa != pb){
        pa = pa == NULL ? headB : pa->next;
        pb = pb == NULL ? headA : pb->next;
    }
    return pa;
}

博主的辣眼代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    //对齐,切菜,指图示中的a1和b2结点对齐,然后切菜(指比较)
    if(headA == NULL || headB ==NULL){
        return NULL;
    }
    int Acount = 1;
    int Bcount = 1;
    int count = 0;
    struct ListNode* pa = headA;
    struct ListNode* pb = headB;
    //对齐
    while(pa){
        pa = pa->next;
        Acount++;
    }
    while(pb){
        pb = pb->next;
        Bcount++;
    }
    if(Acount > Bcount){
        count = Acount - Bcount;
        while(count){
            headA = headA->next;
            count--;
        }
    }
    else{
        count = Bcount - Acount;
        while(count){
            headB = headB->next;
            count--;
        }
    }
    //找相交结点
    while(headA != headB && headA){
        headA = headA->next;
        headB = headB->next;
    }
    if(headA == headB && headA){
        return headA;
    }
    return NULL;
}

每日一表情包:

你的点赞对我很重要!爱你哟! 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值