当前位置:   article > 正文

LeetCode 160. 相交链表(C、C++、python)_python实现leetcode160

python实现leetcode160

编写一个程序,找到两个单链表相交的起始节点。

 

例如,下面的两个链表

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

在节点 c1 开始相交。

 

注意:

如果两个链表没有交点,返回 null。

在返回结果后,两个链表仍须保持原有的结构。

可假定整个链表结构中没有循环。

程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

C

  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. {
  10. struct ListNode* p=headA;
  11. struct ListNode* q=headB;
  12. struct ListNode* h1=NULL;
  13. struct ListNode* h2=NULL;
  14. if(p==NULL || q==NULL)
  15. {
  16. return NULL;
  17. }
  18. else
  19. {
  20. int m=1,n=1;
  21. while(p->next)
  22. {
  23. m++;
  24. p=p->next;
  25. }
  26. while(q->next)
  27. {
  28. n++;
  29. q=q->next;
  30. }
  31. if(p!=q)
  32. {
  33. return NULL;
  34. }
  35. else
  36. {
  37. if(m>n)
  38. {
  39. h1=headA;
  40. h2=headB;
  41. }
  42. else
  43. {
  44. h1=headB;
  45. h2=headA;
  46. }
  47. m=abs(m-n);
  48. for(int i=0;i<m;i++)
  49. {
  50. h1=h1->next;
  51. }
  52. while(h1!=h2)
  53. {
  54. h1=h1->next;
  55. h2=h2->next;
  56. }
  57. return h1;
  58. }
  59. }
  60. }

C++

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
  12. {
  13. ListNode* p=headA;
  14. ListNode* q=headB;
  15. stack<ListNode*> s1;
  16. stack<ListNode*> s2;
  17. if(p==NULL || q==NULL)
  18. {
  19. return NULL;
  20. }
  21. while(p)
  22. {
  23. s1.push(p);
  24. p=p->next;
  25. }
  26. while(q)
  27. {
  28. s2.push(q);
  29. q=q->next;
  30. }
  31. ListNode* res=NULL;
  32. while(!s1.empty() && !s2.empty() && s1.top()==s2.top())
  33. {
  34. res=s1.top();
  35. s1.pop();
  36. s2.pop();
  37. }
  38. return res;
  39. }
  40. };

python

  1. # Definition for singly-linked list.
  2. # class ListNode(object):
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.next = None
  6. class Solution(object):
  7. def getIntersectionNode(self, headA, headB):
  8. """
  9. :type head1, head1: ListNode
  10. :rtype: ListNode
  11. """
  12. p=headA
  13. q=headB
  14. if p==None or q==None:
  15. return None
  16. else:
  17. m=1
  18. n=1
  19. while p.next:
  20. m += 1
  21. p=p.next
  22. while q.next:
  23. n += 1
  24. q=q.next
  25. if p!=q:
  26. return None
  27. else:
  28. m=m-n
  29. if m>0:
  30. h1=headA
  31. h2=headB
  32. else:
  33. h1=headB
  34. h2=headA
  35. m=abs(m)
  36. while m:
  37. h1=h1.next
  38. m -= 1
  39. while h1!=h2 and h1!=None and h2!=None:
  40. h1=h1.next
  41. h2=h2.next
  42. return h1

 

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

闽ICP备14008679号