86. Partition List
Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
Example 1:
Input: head = [1,4,3,2,5,2], x = 3
Output: [1,2,2,4,3,5]
Example 2:
Input: head = [2,1], x = 2
Output: [1,2]
Constraints:文章来源:https://www.toymoban.com/news/detail-501175.html
- The number of nodes in the list is in the range [0, 200].
- -100 <= Node.val <= 100
- -200 <= x <= 200
双链表解法
Solution
The problem wants us to reform the linked list structure, such that the
elements lesser that a certain value x, come before the elements greater or
equal to x. This essentially means in this reformed list, there would be a
point in the linked list before which all the elements would be smaller than
x and after which all the elements would be greater or equal to x.
Let’s call this point as the JOINT.
Reverse engineering the question tells us that if we break the reformed list
at the JOINT, we will get two smaller linked lists, one with lesser elements
and the other with elements greater or equal to x. In the solution, our main aim
is to create these two linked lists and join them.文章来源地址https://www.toymoban.com/news/detail-501175.html
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
before = before_head = ListNode(0)
after = after_head = ListNode(0)
while head:
if head.val < x:
before.next = head
before = before.next
else:
after.next = head
after = after.next
head = head.next
after.next = None
before.next = after_head.next
return before_head.next
到了这里,关于算法:分区列表86. Partition List的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!