Day02 相交链表

47 阅读1分钟

160. 相交链表

题目链接

题目描述

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点,如果两个链表不存在相交节点,返回null。

思路
  • 创建两个指针,分别指向两个链表的头节点
  • 遍历链表,某一指针走到最后的时候,下一步指向另一链表的头节点,再次从头遍历,整体上来讲,两个指针均走过了两个链表的距离,最终相遇的节点即为相交的节点。
  • 假如两个链表不相交,当两个指针均遍历完两个链表距离,最终相等的时候是指向最后空节点的。
代码
/**
 * 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 *pa = headA;
        ListNode *pb = headB;
        while(pa != pb){
            if(pa == NULL){
                pa = headB;
            }
            else{
                pa = pa->next;
            }
            if(pb == NULL){
                pb = headA;
            }
            else{
                pb = pb->next;
            }
        }
        return pa;
    }
};