โจทย์: กำหนด Linked List ตรวจสอบว่าความยาวเป็น Even หรือ Odd
ตัวอย่าง
head = [5,8,7,4,3,6,4,5,8] → Odd (9 nodes)
อัลกอริทึม (Fast Pointer)
- ใช้ Pointer วิ่งทีละ 2 Node (
head = head.next.next) - จบลูป: ถ้า head == None → Even (วิ่งครบคู่)
- ถ้า head != None → Odd (เหลือ Node เดียว)
โค้ดตัวอย่าง
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 solve(head):
while head is not None and head.next is not None:
head = head.next.next
if head is None:
return "Even"
return "Odd"
head = make_list([5,8,7,4,3,6,4,5,8])
print(solve(head))
Input / Output
Input: [5,8,7,4,3,6,4,5,8] Output: Odd