当前位置:   article > 正文

相交链表(数据结构)

相交链表(数据结构)

160. 相交链表 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

题目

解决思路

1,找到相交的点

相交链表的关键也就是找到相交的点,所以我们需要首先判断有没有相交的节点,没有相交的节点结束返回NULL,有相交的节点继续,此时我们已经算出各自的链表的长度(一次循环)

2,算出长度差值

3,遍历找到节点

最后一步两个节点同时移动,当两个节点的地址等于的时候,此时也就是找到了相交的节点

代码

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. typedef struct ListNode ListNode;
  9. ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
  10. {
  11.   //这里的起始节点是1,因为链表场赌博是从1开始计算的
  12. int contA = 1;
  13. int contB = 1;
  14. //进行判断,是不是有相同的尾结点
  15. ListNode*cureA = headA;
  16. ListNode*cureB = headB;
  17. while(cureA)
  18. {
  19. cureA = cureA->next;
  20. //计算A链表的长度
  21. contA++;
  22. }
  23. while(cureB)
  24. {
  25. cureB = cureB->next;
  26. //计算B链表的长度
  27. contB++;
  28. }
  29. if(cureA != cureB)
  30. {
  31. return NULL;
  32. }
  33. //假设法,假设A长
  34. //长的先走,直到指向的位置是平行的
  35. if(contA > contB)
  36. {
  37. int contsame = contA-contB;
  38. while(contsame--)
  39. {
  40. headA = headA->next;
  41. }
  42. }
  43. else
  44. {
  45. int contsame = contB-contA;
  46. while(contsame--)
  47. {
  48. headB = headB->next;
  49. }
  50. }
  51. //找到交点
  52. while(headA)
  53. {
  54. if(headA == headB)
  55. {
  56. return headA;
  57. }
  58. headA = headA->next;
  59. headB = headB->next;
  60. }
  61. return NULL;
  62. }

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

闽ICP备14008679号