标签:
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
.1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */
// 较长链表和较短链表在交叉点前的差值即是两个链表总的长度的差值
9 class Solution { 10 public: 11 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 12 if (headA == nullptr || headB == nullptr) return nullptr; 13 else { 14 int lenA = 0; int lenB = 0; 15 auto* ptr1 = headA; 16 auto* ptr2 = headB; 17 while (ptr1) { 18 ++ lenA; ptr1 = ptr1->next; 19 } 20 while (ptr2) { 21 ++ lenB; ptr2 = ptr2->next; 22 } 23 int diff = (lenA > lenB) ? lenA - lenB : lenB - lenA; 24 ptr1 = headA; ptr2 = headB; 25 if (lenA > lenB) { 26 while (diff --) { 27 ptr1 = ptr1->next; 28 } 29 } else if (lenB > lenA) { 30 while (diff --) { 31 ptr2 = ptr2->next; 32 } 33 } 34 while (ptr1 != ptr2) { 35 ptr1 = ptr1->next; ptr2 = ptr2->next; 36 } 37 return ptr1; 38 } 39 } 40 };
160. Intersection of Two Linked Lists
标签:
原文地址:http://www.cnblogs.com/shadowwalker9/p/5755290.html