📅  最后修改于: 2023-12-03 15:26:49.910000             🧑  作者: Mango
在编程中,有时需要确定给定的链表的长度是奇数还是偶数。这可以通过链表遍历并计数节点数来实现。下面是一个示例算法,它可以确定链表的长度是奇数还是偶数,并打印结果。
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
return
curr_node = self.head
while curr_node.next:
curr_node = curr_node.next
curr_node.next = new_node
def is_even(self):
count = 0
current_node = self.head
while current_node:
count += 1
current_node = current_node.next
return count % 2 == 0
# Example Usage
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
print(linked_list.is_even()) # False
linked_list.append(4)
print(linked_list.is_even()) # True
在上面的代码中,我们定义了两个类,一个是Node类,另一个是LinkedList类。LinkedList类包含一个指向链表头的head属性,以及append()方法用于向链表尾部添加元素,is_even()方法用于确定链表长度是偶数还是奇数。
is_even()方法遍历链表中的每个节点,并计算节点数。然后,它将节点数模2以确定链表长度是偶数还是奇数。如果节点数模2等于0,则链表长度为偶数,方法返回True,否则返回False。
在示例用法部分,我们创建了一个LinkedList对象,并添加了三个节点。然后,我们调用is_even()方法以确定链表长度是奇数还是偶数,并打印结果。然后,我们添加了另一个节点并再次调用is_even()方法。此时,链表长度为偶数,并打印相应的结果。
以上是一个简单的检查链表长度奇偶性的方法。由于链表的特殊性质,我们需要遍历链表来判断其长度,因此时间复杂度为O(n)。