LeetCode-Intersection of Two Linked Lists finds the Intersection position of Two Linked Lists, so that the long Linked list goes first.
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 shocould preferably run in O (n) time and use only O (1) memory. it can only be the time complexity of O (n). The method here is to traverse two linked lists to know the length, then let the long linked list go first, and then compare them by two, time complexity O (lengthA + lengthB + maxLength) is O (n)
/*** 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) {if (headA = NULL | headB = NULL) {return NULL ;} int lengthA = 1; int lengthB = 1; ListNode * Afirst = headA; ListNode * Bfirst = headB; while (Afirst-> next) {lengthA ++; First = Afirst-> next;} while (Bfirst-> next) {lengthB ++; Bfirst = Bfirst-> next;} if (Afirst! = Bfirst) {return NULL;} int length = lengthA; // <Initialize an if (lengthA> lengthB) {int diff = lengthA-lengthB; length = lengthB; while (diff --) {headA = headA-> next ;}} if (lengthA <lengthB) {length = lengthA; int diff = lengthB-lengthA; while (diff --) {headB = headB-> next;} while (length --) {if (headA = headB) {return headA;} headA = headA-> next; headB = headB-> next;} return NULL ;}};