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

LeetCode Intersection of Two Linked Lists (找交叉点)

时间:2015-07-11 22:45:23      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

 

 

题意:给两个链表,他们可能后部分有重叠的地方(重叠是指,两链表都有元素处于同一块地址上),一旦重叠到就不可能分开啦。问在哪重叠的?当然是返回地址了。不重叠就返回null。

 

思路:用O(n)和O(1)的做法。

(1)若两串会重叠,那么到最后一个元素必定会相遇。

(2)先判断是否有重叠。

(3)有重叠了,要考虑两串长度不一样。后段肯定一样,不重叠的那一段可能不一样。要让它们同长才行,使得两个指针每次只走1步才会相遇。

(4)交叉遍历一次就可以使得两个指针处于那样的位置啦。一个指向短链的开头,一个指向长链的前段部分中的某个位置。

 

 

不是很简洁的代码:

技术分享
 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         ListNode *L1=headA;
13         ListNode *L2=headB;
14         //若无交点,且AB等长,那么他们会在null处相遇,退出。
15         //先判断是否有交点先。
16         while(L1&&L1->next) L1=L1->next;
17         while(L2&&L2->next) L2=L2->next;
18         if(L1!=L2)  return NULL;
19         L1=headA;
20         L2=headB;
21         while(L1!=L2)
22         {
23             if(L1)  L1=L1->next;
24             else    L1=headB;
25 
26             if(L2)  L2=L2->next;
27             else L2=headA;
28         }
29         return L1;
30     }
31 };
AC代码

 

 

 

很傻逼但AC的代码:

技术分享
 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         ListNode *p=headA;
13         while(p)  p->val*=-1,p=p->next;
14 
15         ListNode *q=headB;
16         while(q&&q->val>=0  ) q=q->next;
17 
18         p=headA;
19         while(p)  p->val*=-1,p=p->next;
20 
21 
22         if(q)   return q;
23         else 0;
24 
25 
26     }
27 };
AC代码

 

 

简洁的代码:

 

LeetCode Intersection of Two Linked Lists (找交叉点)

标签:

原文地址:http://www.cnblogs.com/xcw0754/p/4639416.html

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