用于在Python中根据值k排列链接列表节点的程序

假设我们有一个单链表和另一个值k。我们必须对节点进行排列,以使所有值小于k的节点排在最前面,然后所有值等于k的节点排在最后,最后是其他节点。约束是节点的相对顺序应保持相同。

因此,如果输入像L = [4,3,6,6,6,6,10,8] k = 6,那么输出将是[4,3,6,6,6,6,10,8,]

为了解决这个问题,我们将遵循以下步骤-

  • less_head:=创建一个值等于0的链表节点

  • 少:= less_head

  • equal_head:=创建一个值等于0的链表节点

  • 等于:= equal_head

  • Greater_head:=创建一个值等于0的链表节点

  • 更大:= Greater_head

  • cur:=节点

  • 当cur不为空时,

    • next of equal:=创建一个值等于cur值的链表节点

    • 等于:=下一个等于

    • 更大的下一个:=创建一个值等于cur值的链表节点

    • 更大:=更大的下一个

    • 下一个:=创建一个值等于cur值的链表节点

    • 少:=少

    • 如果cur的值<k,则

    • 否则,当cur的值> k时,则

    • 除此以外,

    • cur:=下一个cur

    • 少的下一个:= equal_head的下一个

    • 等于的下一个:= Greater_head的下一个

    • 返回less_head的下一个

    让我们看下面的实现以更好地理解-

    示例

    class ListNode:
       def __init__(self, data, next = None):
          self.val = data
          self.next = next
    def make_list(elements):
       head = ListNode(elements[0])
       for element in elements[1:]:
          ptr = head
          while ptr.next:
             ptr = ptr.next
          ptr.next = ListNode(element)
       return head
    def print_list(head):
       ptr = head
       print('[', end = "")
       while ptr:
          print(ptr.val, end = ", ")
          ptr = ptr.next
       print(']')
    class Solution:
       def solve(self, node, k):
       less_head = less = ListNode(0)
       equal_head = equal = ListNode(0)
       greater_head = greater = ListNode(0)
       cur = node
       while cur:
          if cur.val < k:
             less.next = ListNode(cur.val)
             less = less.next
          elif cur.val > k:
             greater.next = ListNode(cur.val)
             greater = greater.next
          else:
             equal.next = ListNode(cur.val)
             equal = equal.next
             cur = cur.next
             less.next = equal_head.next
             equal.next = greater_head.next
          return less_head.next
    ob = Solution()L = make_list([4, 3, 6, 6, 6, 10, 8])
    k = 6
    print_list(ob.solve(L, k))

    输入值

    [4, 3, 6, 6, 6, 10, 8], 6

    输出结果

    [4, 3, 6, 6, 6, 10, 8, ]
    猜你喜欢