当前位置: 面试刷题>> 在链表中找节点 (经典算法题500道)


题目描述补充

题目:在链表中找节点

给定一个单向链表和一个特定的值 target,编写一个函数来查找链表中是否存在值为 target 的节点。如果存在,则返回该节点的指针或引用;如果不存在,则返回 null 或一个表示不存在的值(取决于使用的编程语言)。

示例

假设链表的结构定义如下(以Python为例,其他语言类似):

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

Python 示例代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def searchNode(head, target):
    current = head
    while current:
        if current.val == target:
            return current
        current = current.next
    return None

# 示例使用
# 构建链表 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)

# 查找值为 3 的节点
target_node = searchNode(head, 3)
if target_node:
    print(f"Found node with value {target_node.val}")
else:
    print("Node not found")

PHP 示例代码

class ListNode {
    public $val;
    public $next;

    function __construct($val = 0, $next = null) {
        $this->val = $val;
        $this->next = $next;
    }
}

function searchNode($head, $target) {
    $current = $head;
    while ($current !== null) {
        if ($current->val == $target) {
            return $current;
        }
        $current = $current->next;
    }
    return null;
}

// 示例使用
// 构建链表 1 -> 2 -> 3 -> 4 -> 5
$head = new ListNode(1);
$head->next = new ListNode(2);
$head->next->next = new ListNode(3);
$head->next->next->next = new ListNode(4);
$head->next->next->next->next = new ListNode(5);

// 查找值为 3 的节点
$targetNode = searchNode($head, 3);
if ($targetNode !== null) {
    echo "Found node with value " . $targetNode->val . "\n";
} else {
    echo "Node not found\n";
}

JavaScript 示例代码

class ListNode {
    constructor(val = 0, next = null) {
        this.val = val;
        this.next = next;
    }
}

function searchNode(head, target) {
    let current = head;
    while (current) {
        if (current.val === target) {
            return current;
        }
        current = current.next;
    }
    return null;
}

// 示例使用
// 构建链表 1 -> 2 -> 3 -> 4 -> 5
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);

// 查找值为 3 的节点
let targetNode = searchNode(head, 3);
if (targetNode) {
    console.log(`Found node with value ${targetNode.val}`);
} else {
    console.log("Node not found");
}

码小课网站中有更多关于链表操作和算法设计的相关内容分享给大家学习,欢迎访问以获取更多知识和技巧。

推荐面试题