From 748cb1999f926fd4e374d957441188c768065092 Mon Sep 17 00:00:00 2001 From: Seth Ho Date: Mon, 3 Apr 2017 11:16:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BC=98=E5=8C=96=E7=9A=84?= =?UTF-8?q?=E4=BA=A4=E5=8F=89=E9=93=BE=E8=A1=A8=E6=9F=A5=E6=89=BE=E7=AE=97?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Readme.md b/Readme.md index 85b889c..a5bd1ae 100644 --- a/Readme.md +++ b/Readme.md @@ -1267,7 +1267,36 @@ def node(l1, l2): l1 = l1.next l2 = l2.next ``` +一个更好的算法,有a, b两个链表,假设a链表比b链表长k,分别定义p, q指向a, b的头部。p, q同时向前移动,直至q=NULL,此时p与q的距离为k。令s=head(a),与p同时移动,直至p=NULL。此时令t=head(b),与s同时移动,当t=s时即为交叉的节点。时间复杂度为O(m+n)。 +```python +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + +def overlap_node(l1, l2): + p = l1 + q = l2 + while p.next and q.next: + p = p.next + q = q.next + if p.next: + l = l1 + s = l2 + else: + l = l2 + s = l1 + p = q + while l != s: + if p.next: + l = l.next + p = p.next + else: + l = l.next + s = s.next + return l +``` ## 10 二分查找 ```python