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: int a = countList(headA);
13: int b = countList(headB);
14: int diff = 0;
15: if (a > b) {
16: diff = a - b;
17: while (diff) { headA = headA->next; diff--; }
18: } else {
19: diff = b - a;
20: while (diff) { headB = headB->next; diff--; }
21: }
22: while (headA != headB) {
23: headA = headA->next;
24: headB = headB->next;
25: }
26: return headA;
27: }
28: int countList(ListNode *head) {
29: int count = 0;
30: while (head) {
31: head = head->next;
32: count++;
33: }
34: return count;
35: }
36: };
Saturday, August 6, 2016
160. Intersection of Two Linked Lists
I count the number of the two lists first. And then I compute the offset and move the head pointer of the longer list to the offset. And from there compare the two lists and check the intersection.
Labels:
amazon,
leetcode,
linked list,
math
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment