160链表-相交链表

Posted 孤注一掷 、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了160链表-相交链表相关的知识,希望对你有一定的参考价值。

题目

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

思路

是指针相同,先求出两个链表的长度以及差值,让curA移动到和curB末尾对齐的位置,然后就可以遍历比较是否相同

 代码:

/**
 * 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* curA = headA;
        ListNode* curB = headB;
        int lenA = 0,lenB = 0;
        //求链表A的长度
        while(curA != NULL)
            lenA++;
            curA = curA->next;
        
        //求链表B的长度
        while(curB != NULL)
            lenB++;
            curB = curB->next;
        
        curA = headA;
        curB = headB;
        //让curA成为最长链表的头lenA为其长度
        if(lenB > lenA)
            swap(lenA, lenB);
            swap(curA,curB);
        
        //求长度差
        int gap = lenA - lenB;
        //让链表A和B的末位置对齐
        while(gap--)
            curA = curA->next;
        
        //遍历curA和curB,遇到相同则直接返回
        while(curA != NULL)
            if(curA == curB)
                return curA;
            
            curA = curA->next;
            curB = curB->next;
        
        return NULL;

    
;

以上是关于160链表-相交链表的主要内容,如果未能解决你的问题,请参考以下文章

力扣160. 相交链表 哈希双指针差值法栈四种花式解法

[E模拟] lc160. 相交链表(链表+模拟+多方法)

160. 相交链表

刷题8:找出两个链表的交点

链表160. 相交链表

LeetCode 160. 相交链表