标签:leetcode intersection of two 链表交点 c++
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:
null.class Solution {
public:
    //计算链表长度
  int calcListLength(ListNode *head){
        int count = 0;
        while (head) {
            count++;
            head = head->next;
        }
        return count;
    }
    
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        int lengthA = calcListLength(headA);
        int lengthB = calcListLength(headB);
        ListNode *pA = headA, *pB = headB;
        //计算链表长度的差值,较长的先走N步 
        int n = lengthA - lengthB;
        for(int i=0; i<abs(n); i++){
            if(n>0){
                pA = pA->next;
            }else{
                pB = pB ->next;
            }
        }
        //同时开始遍历,如相等则为交叉点
        while (pB && pA) {
            if (pB == pA) {
                return pB;
            }
            pB = pB->next;
            pA = pA ->next;
        }
        return NULL;
        
    }
};
LeetCode 160 :Intersection of Two Linked Lists
标签:leetcode intersection of two 链表交点 c++
原文地址:http://blog.csdn.net/sunao2002002/article/details/45727149