两种链表题目边界问题的区别
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
本文深入探讨了链表中双指针技巧的应用,通过两道经典题目——寻找链表环入口和链表排序,详细讲解了快慢指针在解决链表边界问题上的巧妙运用。对于链表环入口问题,采用快慢指针相遇后再从头节点出发的策略;对于链表排序,使用快慢指针找到中点,然后递归排序左右子链表。

496

被折叠的 条评论
为什么被折叠?



