程序通过Python中的前后节点交替转换链表

假设我们有一个单链表,我们必须重新排列它,以便采用:最后一个节点,然后是第一个节点,然后是第二个最后一个节点,然后是第二个节点,依此类推。

因此,如果输入类似于[1,2,3,4,5,6,7,8,9],那么输出将为[9,1,8,2,2,7,3,6,4,5 ,]

为了解决这个问题,我们将按照以下步骤操作:

  • c:=节点

  • l:=一个新列表

  • 当c不为空时,

    • c的值:= l中最后一个元素的值并将其删除

    • c:= c的下一个

    • 如果c为null,则

    • c的值:= l中最后一个元素的值并将其删除

    • c:= c的下一个

    • 从循环中出来

    • 在l的末尾插入c的值

    • c:= c的下一个

    • c:=节点

    • 当c不为null且l为非空时,执行

    • 返回节点

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

    示例

    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):
          c = node
          l = []
          while c:
             l.append(c.val)
             c = c.next
    
          c = node
          while c and l:
             c.val = l.pop()
             c = c.next
             if c == None:
                break
             c.val = l.pop(0)
             c = c.next
          return node
    
    ob = Solution()head = make_list([1,2,3,4,5,6,7,8,9])
    print_list(ob.solve(head))

    输入值

    [1,2,3,4,5,6,7,8,9]

    输出结果

    [9, 1, 8, 2, 7, 3, 6, 4, 5, ]
    猜你喜欢