148. Sort List

Medium (Trung bình) Python 🔗 Xem trên LeetCode

📋 Đề Bài

Given the head of a linked list, return the list after sorting it in ascending order.

 

Example 1:

Input: head = [4,2,1,3]
Output: [1,2,3,4]

Example 2:

Input: head = [-1,5,3,4,0]
Output: [-1,0,3,4,5]

Example 3:

Input: head = []
Output: []

 

Constraints:

  • The number of nodes in the list is in the range [0, 5 * 104].
  • -105 <= Node.val <= 105

 

Follow up: Can you sort the linked list in O(n logn) time and O(1) memory (i.e. constant space)?

🧠 Thuật Toán & Kỹ Thuật

Linked List (Danh sách liên kết)Sorting (Sắp xếp)
⏱️ Thời gian O(n²)
💾 Không gian O(n)

💻 Lời Giải

Python 0148-sort-list.py
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        currNode = head
        listNode = []
        
        while currNode:
            listNode.append(currNode.val)
            currNode = currNode.next
            
        listNode.sort()
        
        answNode = ListNode(0)
        dummNode = answNode
        
        for nodeVal in listNode:
            dummNode.next = ListNode(nodeVal)
            dummNode = dummNode.next
        
        return answNode.next