码迷,mamicode.com
首页 > 其他好文 > 详细

Intersection of Two Linked Lists

时间:2015-03-08 11:35:39      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

存在两个单向链表,如果两者在某个节点相交合并,则返回交点,不相交则返回null。

思路:如果两个链表长度相等,则两个指针依次前进,到结尾之前如果遇到val值相等,则返回该节点。如果不相等,则长的那个链表先走若干步,使得剩下的步数与短的链表的步数相同。

注意点

  • 空指针
  • 由于是单链表,需要保存链表头

    1. class Solution {
    2. public:
    3. ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    4. if (headA == NULL || headB == NULL)
    5. {
    6. return NULL;
    7. }
    8. int lengthA = 0, lengthB = 0;
    9. ListNode* tmpA = headA;
    10. ListNode* tmpB = headB;
    11. while (tmpA->next != NULL)
    12. {
    13. lengthA++;
    14. tmpA = tmpA->next;
    15. }
    16. while (tmpB->next != NULL)
    17. {
    18. lengthB++;
    19. tmpB = tmpB->next;
    20. }
    21. if (tmpA->val != tmpB->val)
    22. return NULL;
    23. tmpA = headA;
    24. tmpB = headB;
    25. if (lengthA >lengthB)
    26. {
    27. for (size_t i = 0; i < lengthA-lengthB; i++)
    28. {
    29. headA = headA->next;
    30. }
    31. }
    32. else
    33. {
    34. for (size_t i = 0; i < lengthB - lengthA; i++)
    35. {
    36. headB = headB->next;
    37. }
    38. }
    39. while (headA != NULL)
    40. {
    41. if (headA->val == headB->val)
    42. {
    43. return headA;
    44. }
    45. else
    46. {
    47. headA = headA->next;
    48. headB = headB->next;
    49. }
    50. }
    51. }
    52. };




Intersection of Two Linked Lists

标签:

原文地址:http://www.cnblogs.com/flyjameschen/p/4321391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!