สมมติว่าเรามีรายการที่เชื่อมโยงกันโดยลำพัง เราต้องจัดกลุ่มโหนดคี่ทั้งหมดเข้าด้วยกัน ตามด้วยโหนดคู่ ที่นี้เรากำลังพูดถึงตำแหน่งของโหนดไม่ใช่ค่าในโหนด เราควรพยายามทำมันให้เข้าที่ ดังนั้นหากโหนดเป็น [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, ]