21、合并两个升序链表
1、迭代
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode()
curr = dummy
while l1 != None and l2 != None:
if l1.val <= l2.val:
dummy.next = l1
l1 = l1.next
else:
dummy.next = l2
l2 = l2.next
dummy = dummy.next
if l1 != None:
dummy.next = l1
if l2 != None:
dummy.next = l2
return curr.next
2、递归
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if l1 is None:
return l2
elif l2 is None:
return l1
elif l1.val <= l2.val:
l1.next = self.mergeTwoLists(l1.next,l2)
return l1
else:
l2.next = self.mergeTwoLists(l1,l2.next)
return l2
160 相交链表
1、双指针
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
n1 = headA
n2 = headB
while n1 != n2:
if n1 == None:
n1 = headB
else:
n1 = n1.next
if n2 == None:
n2 = headA
else:
n2 = n2.next
return n1
141、环形链表1
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if not head or not head.next:
return False
n1 = head
n2 = head.next
while n1 != n2:
if not n2 or not n2.next:
return False
n1 = n1.next
n2 = n2.next.next
return True
142 环形链表2
1、双指针
class Solution:
def detectCycle(self, head: ListNode) -> ListNode:
if head == None:
return None
n1 = head
n2 = head
iscycle = False
while n2.next != None and n2.next.next != None:
n1 = n1.next
n2 = n2.next.next
if n1 == n2:
iscycle = True
break
if iscycle == False:
return None
n2 = head
while n1 != n2:
n1 = n1.next
n2 = n2.next
return n1