leetcode:160相交链表
求两个单链表相交的起始节点。
如图,则返回c1
如果不相交,则返回None
题解:
简单做法,分配两个数组,一边遍历,一遍将链表中的元素存入数组。
遇到第一个元素,在另外一个数组中。则是结果
难一点的做法:双指针,
1->2->3
4->1->2->3
试想:链表1后面加上链表2,1->2->3->4->1->2->3
则长度和链表2后面加上链表14->1->2->3->1->2->3
指针1指向 链表1
指针2指向 链表2
同时向后遍历。
如果中间遇到相同的节点,则此节点为结果。(如图的节点1)
否则结果为None
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
point1 = headA
point2 = headB
while point1!=point2:
if point1==None:
point1=headB
else:
point1=point1.next
if point2==None:
point2=headA
else:
point2=point2.next
return point1