📜  查找链表的长度(迭代和递归)(1)

📅  最后修改于: 2023-12-03 14:55:36.481000             🧑  作者: Mango

查找链表长度

在链表中,要查找链表的长度是一项基本操作。在本篇文章中,我们将介绍如何使用迭代和递归两种方法来查找链表的长度。

迭代方法

对于一个单向链表,我们可以使用迭代方式来查找其长度。具体的实现过程如下:

  1. 从头节点开始,设置一个计数器count为0。
  2. 遍历链表,每经过一个节点,count增加1。
  3. 遍历到链表末尾时,我们便得到了链表的长度。

以下是一个C++实现的示例代码:

int getLength(ListNode* head) {
    int count = 0;
    ListNode* p = head;
    while (p) {
        count++;
        p = p->next;
    }
    return count;
}
递归方法

除了迭代方法外,我们还可以使用递归方式来查找链表长度。不同于迭代方法只需遍历一次链表,使用递归需要对每一个节点进行递归处理,因此时间复杂度更高。

具体的实现过程如下:

  1. 对于链表中的每一个节点,递归函数getLengthRecursive会调用自身,并将该节点的下一个节点作为参数传入。
  2. 当遍历到链表末尾时,我们便得到了链表的长度,此时递归结束。

以下是一个C++实现的示例代码:

int getLengthRecursive(ListNode* head) {
    if (head == nullptr) {
        return 0;
    }
    return 1 + getLengthRecursive(head->next);
}
总结

以上介绍了如何使用迭代和递归两种方法来查找链表的长度。迭代方法的实现逻辑简单直接,时间复杂度为$O(n)$。而递归方法则需要处理每一个节点,时间复杂度为$O(n)$,空间复杂度也为$O(n)$。因此,在实际应用中需要根据具体情况进行选择。