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

LeetCode 相交链表

时间:2018-09-08 13:04:16      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:int   复杂   相交   时间复杂度   info   src   code   bubuko   程序   

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

 

例如,下面的两个链表:

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

在节点 c1 开始相交。

 

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

 

 方法一:

技术分享图片

 1 /* C++ */
 2 /**
 3  * Definition for singly-linked list.
 4  * struct ListNode {
 5  *     int val;
 6  *     ListNode *next;
 7  *     ListNode(int x) : val(x), next(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
13         if(headA == NULL || headB == NULL){
14             return NULL;
15         }
16         ListNode *a = headA;
17         ListNode *b = headB;
18         // 计算A和B的长度
19         int lenA = 0,lenB = 0;
20         while(a->next != NULL){
21             a = a->next;
22             lenA++;
23         }
24         while(b->next != NULL){
25             b = b->next;
26             lenB++;
27         }
28         int step = lenB - lenA;
29         if(step>0){
30             //说明B长
31             a = headB;
32             b = headA;
33         }else{// 说明A长
34             a = headA;
35             b = headB;
36             step *= -1;
37         }
38         while(step -- ){
39             a = a->next;
40         }
41         while(a != b){
42             a = a->next;b = b->next;
43         }
44         return a;
45     }
46 };

 

LeetCode 相交链表

标签:int   复杂   相交   时间复杂度   info   src   code   bubuko   程序   

原文地址:https://www.cnblogs.com/yxh-amysear/p/9608796.html

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