📜  搜索链表中的元素(迭代和递归)(1)

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

搜索链表中的元素(迭代和递归)

在链表中搜索元素是链表算法中经常遇到的问题。这里将介绍两种常见的方法,分别是迭代和递归。

迭代搜索

迭代是一种通过重复执行一组指令来解决问题的算法。在链表中,我们可以编写一个 while 循环,来枚举链表中的每个节点并查找目标元素。

def search_iterative(head, target):
    curr = head
    while curr:
        if curr.val == target:
            return True
        curr = curr.next
    return False

代码解释:

  1. 我们从链表的头节点开始遍历,将当前节点设置为 head。
  2. 在每个节点上,我们将检查该节点的值是否等于目标值 target。如果是,我们就立即返回 True。
  3. 如果我们从链表中找不到目标值,最终会遍历到 None,然后返回 False。
递归搜索

递归是一种通过不断将问题分解为更小的,更易于处理的子问题的算法。在链表中,我们可以递归地搜索链表,并将目标元素放在子问题中。

def search_recursive(head, target):
    if not head:
        return False
    if head.val == target:
        return True
    return search_recursive(head.next, target)

代码解释:

  1. 我们通过检查 head 是否为空来判断是否到达链表的末尾,如果是,返回 False。
  2. 我们将检查该节点的值是否等于目标值 target。如果是,我们就立即返回 True。
  3. 如果我们从当前节点中找不到目标值,则将子问题转化为从下一个节点开始查找。
结论

两种方法的时间复杂度都是 O(n),其中 n 表示链表的长度。选择哪种方法取决于问题的复杂性,以及程序员的个人偏好。