题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
代码
思路
链表的特点,如果两个链表有一个公共点,则后面的都会重叠。如果两个链表长度不一,先让长的先走几步,两个链表再一起走
编程注意点
while pHead1 != pHead2 and pHead1 and pHead2:
把此条语句写成了如下,一直调试不通,错误使用了not
while pHead1 != pHead2 and not pHead1 and not pHead2:
1 # -*- coding:utf-8 -*-
2 # class ListNode:
3 # def __init__(self, x):
4 # self.val = x
5 # self.next = None
6 class Solution:
7 def FindFirstCommonNode(self, pHead1, pHead2):
8 # write code here
9 if not pHead1 or not pHead2:
10 return None
11 # 分别计算两个链表的长度
12 n1 = 0
13 n2 = 0
14 p1 = pHead1
15 p2 = pHead2
16 while p1:
17 n1 += 1
18 p1 = p1.next
19 while p2:
20 n2 += 1
21 p2 = p2.next
22 #p1 = pHead1
23 #p2 = pHead2
24 if n1>n2: #第一个链表长,让第一个链表先走n步
25 n = n1 -n2
26 while n!= 0:
27 n = n-1
28 pHead1 = pHead1.next
29 else:
30 n = n2 -n1
31 while n!= 0:
32 n = n-1
33 pHead2 = pHead2.next
34 while pHead1 != pHead2 and pHead1 and pHead2:
35 pHead1 = pHead1.next
36 pHead2 = pHead2.next
37 if pHead1 == pHead2:
38 return pHead1
39 else:
40 return None
41