两种链表题目边界问题的区别
142
class Solution:
def detectCycle(self, head: ListNode) -> ListNode:
if not head or not head.next: return None
p=q=head# 这里注意是两个走相同的距离
while p and q:
p=p.next
q=q.next
if q: q=q.next
else: return None
if p==q:
p=head
while p!=q:
p=p.next
q=q.next
return p
148
class Solution:
def sortList(self, head: ListNode) -> ListNode:
if not head or not head.next: return head
low = head
fast=low.next
while fast and fast.next:# 这里要找的是中心mid,所以要这么走
fast=fast.next.next
low=low.next# 如果长度是2,那么low指的是前面一个,如果是前一题,则错了
mid=low.next;low.next=None
p=self.sortList(head)
q=self.sortList(mid)
du=dummy=ListNode(-1)
while p and q:
if p.val<q.val:
du.next=p
p=p.next
else:
du.next=q
q=q.next
du=du.next
du.next=p if p else q
return dummy.next