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