当前位置:   article > 正文

Leetcode——相交链表

Leetcode——相交链表

方法

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
  9. int lenA = 0, lenB = 0;
  10. struct ListNode* curA = headA, *curB = headB;
  11. while(curA != NULL)
  12. {
  13. lenA++;
  14. curA = curA->next;
  15. }
  16. while(curB != NULL)
  17. {
  18. lenB++;
  19. curB = curB->next;
  20. }
  21. struct ListNode* longList = headA;
  22. struct ListNode* shortList = headB;
  23. int dis = lenA - lenB;
  24. if(lenA < lenB)
  25. {
  26. longList = headB;
  27. shortList = headA;
  28. dis = -dis;
  29. }
  30. struct ListNode* longCur = longList;
  31. struct ListNode* shortCur = shortList;
  32. while(dis--)
  33. {
  34. longCur = longCur->next;
  35. }
  36. while(longCur != NULL && shortCur != NULL)
  37. {
  38. if(longCur == shortCur)
  39. {
  40. return longCur;
  41. }
  42. longCur = longCur->next;
  43. shortCur = shortCur->next;
  44. }
  45. return NULL;
  46. }

思路

如果两个链表相交,那么从交点之后它们的节点都相同。如果想求出交点,可以先遍历两个链表求出它们的长度。求出长度差。然后创建两个指针分别指向两个链表的头节点,之后让长链表先走长度差步,此时两个指针同时走,并且每走一步都要比较指向的节点是否是同一个节点,如果是,则返回节点,遍历完之后则返回空。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/452111
推荐阅读
相关标签
  

闽ICP备14008679号