leetcode@ [160]Intersection of Two Linked Lists

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

Write a program to find the node at which the intersection of two singly linked lists begins.

 

For example, the following two linked lists:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

begin to intersect at node c1.

Notes:

    • If the two linked lists have no intersection at all, return null.
    • The linked lists must retain their original structure after the function returns.
    • You may assume there are no cycles anywhere in the entire linked structure.
    • Your code should preferably run in O(n) time and use only O(1) memory.
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int getLength(ListNode *head){
        int ret = 0;
        while(head != NULL){
            head = head->next;
            ret++;
        }
        return ret;
    }
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        int lenA = getLength(headA), lenB = getLength(headB);
        
        if(lenA > lenB){
            int times = lenA -lenB;
            while(times--) headA = headA->next;
        }
        else{
            int times = lenB- lenA;
            while(times--) headB = headB->next;
        }
        
        if(headA == headB && headA && headB) return headA;
        while(headA && headB){
            headA = headA->next;
            headB = headB->next;
            if(headA == headB && headA && headB) return headA;
        }

        return NULL;
    }
};
原文地址:https://www.cnblogs.com/fu11211129/p/4927852.html