📌  相关文章
📜  检查给定链表的长度是偶数还是奇数(1)

📅  最后修改于: 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)。