标签:
题目描述:
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
.solution:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (headA == NULL || headB == NULL) return NULL; int lenA = 0; int lenB = 0; ListNode *pA = headA; while (pA != NULL) { ++lenA; pA = pA->next; } ListNode *pB = headB; while (pB != NULL) { ++lenB; pB = pB->next; } if (pA != pB) return NULL; pA = headA; pB = headB; if (lenA > lenB) { int k = lenA - lenB; while (k--) { pA = pA->next; } } else { int k = lenB - lenA; while (k--) { pB = pB->next; } } while (pA != pB) { pA = pA->next; pB = pB->next; } return pA; }
上述解法来自《剑指offer》,还有一种基于Hashset的方法。
solution:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (headA == NULL || headB == NULL) return NULL; unordered_set<ListNode*> st; while (headA != NULL) { st.insert(headA); headA = headA->next; } while (headB != NULL) { if (st.find(headB) != st.end()) return headB; headB = headB->next; } return NULL; }
Intersection of Two Linked Lists (判断两个单链表是否相交)
标签:
原文地址:http://www.cnblogs.com/gattaca/p/4671846.html