Intersection of Two Linked Lists
2015-03-08 10:50 笨笨的老兔子 阅读(142) 评论(0) 收藏 举报存在两个单向链表,如果两者在某个节点相交合并,则返回交点,不相交则返回null。
思路:如果两个链表长度相等,则两个指针依次前进,到结尾之前如果遇到val值相等,则返回该节点。如果不相等,则长的那个链表先走若干步,使得剩下的步数与短的链表的步数相同。
注意点
- 空指针
由于是单链表,需要保存链表头
class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == NULL || headB == NULL){return NULL;}int lengthA = 0, lengthB = 0;ListNode* tmpA = headA;ListNode* tmpB = headB;while (tmpA->next != NULL){lengthA++;tmpA = tmpA->next;}while (tmpB->next != NULL){lengthB++;tmpB = tmpB->next;}if (tmpA->val != tmpB->val)return NULL;tmpA = headA;tmpB = headB;if (lengthA >lengthB){for (size_t i = 0; i < lengthA-lengthB; i++){headA = headA->next;}}else{for (size_t i = 0; i < lengthB - lengthA; i++){headB = headB->next;}}while (headA != NULL){if (headA->val == headB->val){return headA;}else{headA = headA->next;headB = headB->next;}}}};
浙公网安备 33010602011771号