Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình đảo ngược danh sách được liên kết bằng Python

Giả sử chúng ta có một danh sách liên kết, chúng ta phải đảo ngược nó. Vì vậy, nếu danh sách giống như 2 -> 4 -> 6 -> 8, thì danh sách đảo ngược mới sẽ là 8 -> 6 -> 4 -> 2.

Để giải quyết vấn đề này, chúng tôi sẽ thực hiện theo cách tiếp cận này -

  • Xác định một thủ tục để thực hiện đảo ngược danh sách theo cách đệ quy là giải quyết (head, back)
  • nếu phần đầu không xuất hiện, thì hãy quay lại phần đầu
  • temp:=head.next
  • head.next:=back
  • back:=head
  • nếu tạm thời trống, sau đó quay lại head
  • head:=temp
  • trả về giải quyết (đầu, quay lại)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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(object):
   def reverseList(self, head):
      return self.solve(head,None)
def solve(self, head, back):
   if not head:
      return head
   temp= head.next
   head.next = back
   back = head
   if not temp:
      return head
   head = temp
   return self.solve(head,back)
list1 = make_list([5,8,9,6,4,7,8,1])
ob1 = Solution()
list2 = ob1.reverseList(list1)
print_list(list2)

Đầu vào

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

Đầu ra

[2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13,]