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

Danh sách được liên kết chẵn lẻ bằng Python

Giả sử chúng ta có một danh sách được liên kết đơn lẻ, chúng ta phải nhóm tất cả các nút lẻ lại với nhau theo sau là các nút chẵn. Ở đây chúng ta đang nói về vị trí nút chứ không phải giá trị trong các nút. Chúng ta nên cố gắng làm điều đó tại chỗ. Vì vậy, nếu các nút là [1,22,13,14,25], kết quả sẽ là [1,13,25,22,14]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu phần đầu là rỗng hoặc phần tiếp theo của phần đầu là rỗng, thì trả về phần đầu
  • head1:=head, head2:=next of head, head_beg:=next of head
  • while next of head2 không phải là null và next of (next of head không phải là null)
    • next of head1:=next of head2
    • next of head2 =next of (tiếp theo của head)
    • head1:=next of head1 và head2:=next of head2
  • nếu phần tiếp theo của head2 không rỗng
    • next of head1:=next of head2
    • head1:=next of head1
  • tiếp theo của head1:=head2_beg và tiếp theo của head2 =null
  • quay lại đầu

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 oddEvenList(self, head):
      if head == None or head.next ==None:
         return head
      head1=head
      head2,head2_beg= head.next,head.next
      while head2.next!= None and head2.next.next!= None:
         head1.next = head2.next
         head2.next = head2.next.next
         head1 = head1.next
         head2 = head2.next
      if head2.next!=None:
         head1.next = head2.next
         head1 = head1.next
      head1.next = head2_beg
      head2.next = None
      return head
ob1 = Solution()
head = make_list([1,22,13,14,25])
print_list(ob1.oddEvenList(head))

Đầu vào

[1,22,13,14,25]

Đầu ra

[1, 13, 25, 22, 14, ]