随性更新刷题系列
题目
链接: 具体题目
思路
解法1:让两个链表末端对齐,使两个链表从同一长度开始遍历
# 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:
#方法一:将两个链表尾部对齐,指针从相同的位置开始
curA=headA
curB=headB
indexA=0
indexB=0
while curA!=None:
curA=curA.next
indexA+=1
while curB!=None:
curB=curB.next
indexB+=1
curA=headA
curB=headB
if indexA-indexB>=0:
for _ in range(indexA-indexB):
curA=curA.next
elif indexB-indexA>0:
for _ in range(indexB-indexA):
curB=curB.next
while curA!= None and curB!= None:
if curA==curB:
break
curA=curA.next
curB=curB.next
return curA
解法二:遵循快慢指针原则,当短的链表遍历到最后一个节点时接着另一个节点的头部继续遍历,那么一直交替遍历,迟早两个指针会重合。
# 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:
curA=headA
curB=headB
while curA!=curB:
curA = curA.next if curA else headB
curB = curB.next if curB else headA
return curA