[LeetCode] 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.

 

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.

 

老题目了,复习一下。

 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         ListNode *pA, *pB;

13         int lenA, lenB;

14         pA = headA; 

15         lenA = 0;

16         while (pA != NULL) {

17             ++lenA;

18             pA = pA->next;

19         }

20         pB = headB; 

21         lenB = 0;

22         while (pB != NULL) {

23             ++lenB;

24             pB = pB->next;

25         }

26         int idx = lenA > lenB ? (lenA - lenB) : (lenB - lenA);

27         pA = headA; pB = headB;

28         if (lenA > lenB) {

29             while (idx--) {

30                 pA = pA->next;

31             }

32         } else {

33              while (idx--) {

34                 pB = pB->next;

35             }

36         }

37         while (pA != pB) {

38             pA = pA->next;

39             pB = pB->next;

40         }

41         return pA;

42     }

43 };

 

你可能感兴趣的:(intersect)