Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

รายการที่เชื่อมโยงคู่คี่ใน Python


สมมติว่าเรามีรายการที่เชื่อมโยงกันโดยลำพัง เราต้องจัดกลุ่มโหนดคี่ทั้งหมดเข้าด้วยกัน ตามด้วยโหนดคู่ ที่นี้เรากำลังพูดถึงตำแหน่งของโหนดไม่ใช่ค่าในโหนด เราควรพยายามทำมันให้เข้าที่ ดังนั้นหากโหนดเป็น [1,22,13,14,25] ผลลัพธ์จะเป็น [1,13,25,22,14]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้า head เป็น null หรือ ถัดไป ของ head เป็น null ให้ส่งคืนหัว
  • head1 :=head, head2 :=ถัดไปของ head, head_beg :=ถัดไปของ head
  • ในขณะที่ next of head2 ไม่เป็น null และ next of (ถัดไปของ head ไม่เป็น null)
    • ข้าง head1 :=ข้าง head2
    • ข้างหัว2 =ข้าง(ข้างหัว)
    • head1 :=ถัดไปของ head1 และ head2 :=ถัดไปของ head2
  • ถ้าถัดไปของ head2 ไม่เป็นโมฆะ
    • ข้าง head1 :=ข้าง head2
    • head1 :=ถัดไปจาก head1
  • ถัดจาก head1 :=head2_beg และถัดไปของ head2 =null
  • กลับหัว

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

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))

อินพุต

[1,22,13,14,25]

ผลลัพธ์

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