码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 160. 相交链表 Intersection of Two Linked Lists (Easy)

时间:2020-04-29 21:53:21      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:next   node   val   无效   inf   code   ref   一起   ++   

 

编写一个程序,找到两个单链表相交的起始节点。力扣

 

解法一:剑指offer中思路,先计算两个链表长度(lengthA, lengthB),然后长链表先走(lengthA-lengthB)步后,两个链表一起走,相等节点即为要找的节点。

/**
 * 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) {
        
        if (headA == nullptr || headB == nullptr)  //无效输入
            return nullptr;

        ListNode *pNodeA = headA, *pNodeB = headB;
        int lengthA = 0, lengthB = 0;

        for (; pNodeA != nullptr; ++lengthA)  //计算链表A长度
            pNodeA = pNodeA->next;
        for (;pNodeB != nullptr; ++lengthB)  //计算链表B长度
            pNodeB = pNodeB->next;

        int diff = lengthA - lengthB;  //此处默认链表A更长
        pNodeA = headA;  //记得重新赋值,这里忘掉了
        pNodeB = headB;
        if (diff < 0)  //否则交换
        {
            diff = lengthB - lengthA;
            pNodeA = headB;
            pNodeB = headA;
        }

        for (int i = 0; i < diff; ++i)  //长链表先走
            pNodeA = pNodeA->next;

        while (pNodeA != pNodeB && pNodeA != nullptr && pNodeB != nullptr)  //两个链表节点相等时跳出
        {
            pNodeA = pNodeA->next;
            pNodeB = pNodeB->next;
        }

        return pNodeA;
    }
};

 

解法二:思路类似于上述代码。

技术图片

/**
 * 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 *pNodeA = headA, *pNodeB = headB;
        while (pNodeA != pNodeB)
        {
            pNodeA = (pNodeA == nullptr) ? headB : pNodeA->next;
            pNodeB = (pNodeB == nullptr) ? headA : pNodeB->next;
        }
        return pNodeA;
    }
};

如果只是判断是否存在交点,有两种解法:

  • 把第一个链表的结尾连接到第二个链表的开头,看第二个链表是否存在环;
  • 或者直接比较两个链表的最后一个节点是否相同。

LeetCode 160. 相交链表 Intersection of Two Linked Lists (Easy)

标签:next   node   val   无效   inf   code   ref   一起   ++   

原文地址:https://www.cnblogs.com/ZSY-blog/p/12804338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!