马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
标题形貌
给你链表的头结点 head ,请将其按 升序 分列并返回 排序后的链表 。
示例 1:
- <strong>输入:</strong>head = [4,2,1,3]
- <strong>输出:</strong>[1,2,3,4]
复制代码 示例 2:
- <strong>输入:</strong>head = [-1,5,3,4,0]
- <strong>输出:</strong>[-1,0,3,4,5]
复制代码 示例 3:- <strong>输入:</strong>head = []
- <strong>输出:</strong>[]
复制代码 思绪
使用快慢指针完成+归并两个有序链表完成归并排序- # Definition for singly-linked list.
- class ListNode(object):
- def __init__(self, val=0, next=None):
- self.val = val
- self.next = next
- class Solution(object):
- def sortFunc(self, head, tail):
- if not head:
- return head
- if head.next == tail:
- head.next = None
- return head
- slow = fast = head
- while fast != tail:
- slow = slow.next
- fast = fast.next
- if fast != tail:
- fast = fast.next
- mid = slow
- return self.merge(self.sortFunc(head, mid), self.sortFunc(mid, tail))
- def merge(self, head1, head2):
- pre = ListNode(-1)
- head, head1, head2 = pre, head1, head2
- while head1 and head2:
- if head1.val <= head2.val:
- head.next = head1
- head1 = head1.next
- else:
- head.next = head2
- head2 = head2.next
- head = head.next
- if head1:
- head.next = head1
- if head2:
- head.next = head2
- return pre.next
- def sortList(self, head):
- """
- :type head: ListNode
- :rtype: ListNode
- """
- return self.sortFunc(head, None)
- if __name__ == '__main__':
- s = Solution()
- head = ListNode(1)
- phead = head
- data = [4, 3, 7, 5]
- for i in data:
- node = ListNode(i)
- phead.next = node
- phead = phead.next
- head = s.sortList(head)
- while head:
- print(head.val),
- head = head.next
复制代码 二刷:- # Definition for singly-linked list.
- # class ListNode(object):
- # def __init__(self, val=0, next=None):
- # self.val = val
- # self.next = next
- class Solution(object):
- def sortFunc(self,head, tail):
- if not head:
- return None
- if head.next == tail:
- head.next = None
- return head
- slow = fast = head
- while fast!=tail:
- slow=slow.next
- fast = fast.next
- if fast!=tail:
- fast=fast.next
- mid = slow
- return self.merge(self.sortFunc(head,mid), self.sortFunc(mid,tail))
- def merge(self, head1, head2):
- pre = ListNode(-1)
- head = pre
- while head1 and head2:
- if head1.val<head2.val:
- head.next = head1
- head1 = head1.next
- else:
- head.next = head2
- head2 = head2.next
- head = head.next
- if head1:
- head.next = head1
- if head2:
- head.next = head2
- return pre.next
- def sortList(self, head):
- """
- :type head: Optional[ListNode]
- :rtype: Optional[ListNode]
- """
- return self.sortFunc(head,None)
复制代码 影象点:
快慢指针找中心节点+归并+头尾相连返回none
ps:主函数的入参是:head,None
|