From cd4529c8ff7c4570a4541988c1cf3a76e3586150 Mon Sep 17 00:00:00 2001
From: bin3826246 <59920177+bin3826246@users.noreply.github.com>
Date: Fri, 14 Jan 2022 19:15:00 +0800
Subject: [PATCH 1/2] =?UTF-8?q?Create=20=E9=9D=A2=E8=AF=95=E9=A2=98=2002.0?=
=?UTF-8?q?7.=20=E8=A7=A3=E6=B3=95=E6=9B=B4=E6=96=B0.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/面试题 02.07. 解法更新.md | 41 +++++++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 problems/面试题 02.07. 解法更新.md
diff --git a/problems/面试题 02.07. 解法更新.md b/problems/面试题 02.07. 解法更新.md
new file mode 100644
index 00000000..119f875c
--- /dev/null
+++ b/problems/面试题 02.07. 解法更新.md
@@ -0,0 +1,41 @@
+# 双指针,不计算链表长度
+设置指向headA和headB的指针pa、pb,分别遍历两个链表,每次循环同时更新pa和pb。
+* 当链表A遍历完之后,即pa为空时,将pa指向headB;
+* 当链表B遍历完之后,即pa为空时,将pb指向headA;
+* 当pa与pb相等时,即指向同一个节点,该节点即为相交起始节点。
+* 若链表不相交,则pa、pb同时为空时退出循环,即如果链表不相交,pa与pb在遍历过全部节点后同时指向结尾空节点,此时退出循环,返回空。
+# 证明思路
+设链表A不相交部分长度为a,链表B不相交部分长度为b,两个链表相交部分长度为c。
+在pa指向链表A时,即pa为空之前,pa经过链表A不相交部分和相交部分,走过的长度为a+c;
+pa指向链表B后,在移动相交节点之前经过链表B不相交部分,走过的长度为b,总合为a+c+b。
+同理,pb走过长度的总合为b+c+a。二者相等,即pa与pb可同时到达相交起始节点。
+该方法可避免计算具体链表长度。
+```cpp
+class Solution {
+public:
+ ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
+ //链表为空时,返回空指针
+ if(headA == nullptr || headB == nullptr) return nullptr;
+ ListNode* pa = headA;
+ ListNode* pb = headB;
+ //pa与pb在遍历过全部节点后,同时指向结尾空节点时退出循环
+ while(pa != nullptr || pb != nullptr){
+ //pa为空时,将pa指向headB
+ if(pa == nullptr){
+ pa = headB;
+ }
+ //pa为空时,将pb指向headA
+ if(pb == nullptr){
+ pb = headA;
+ }
+ //pa == pb时,返回相交起始节点
+ if(pa == pb){
+ return pa;
+ }
+ pa = pa->next;
+ pb = pb->next;
+ }
+ return nullptr;
+ }
+};
+```
From 570022f6666b633891bb9e590488529d5238d254 Mon Sep 17 00:00:00 2001
From: bin3826246 <59920177+bin3826246@users.noreply.github.com>
Date: Fri, 14 Jan 2022 19:20:36 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E9=9D=A2=E8=AF=95=E9=A2=9802.07=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0cpp=E5=8F=8C=E6=8C=87=E9=92=88=E6=96=B0?=
=?UTF-8?q?=E8=A7=A3=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
双指针新解法,不需计算链表长度
---
problems/面试题 02.07. 解法更新.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/problems/面试题 02.07. 解法更新.md b/problems/面试题 02.07. 解法更新.md
index 119f875c..6115d02e 100644
--- a/problems/面试题 02.07. 解法更新.md
+++ b/problems/面试题 02.07. 解法更新.md
@@ -28,7 +28,7 @@ public:
if(pb == nullptr){
pb = headA;
}
- //pa == pb时,返回相交起始节点
+ //pa与pb相等时,返回相交起始节点
if(pa == pb){
return pa;
}