数据结构:单向链表系列5--在链表中查找元素

在链表中查找元素

函数签名:

bool search(Node *head, int x) 

如果在链表中查找到这个元素返回true,否则false

迭代法

2) 初始化一个节点指针, current = head.
3) 如果current不为NULL执行以下循环
    a) current->key 等于当前待查找值key则返回true.
    b) current = current->next
4) 否则返回 false 
/*Checks whether the value key is present in linked list*/
bool search(struct Node* head, int key)
{
    struct Node* current = head; //Initialize current

    while(current != NULL)
    {
        if(current->data == key)
            return true;
        current = current->next;
    }

    return false;
}

java:

  //Checks whether the value key is present in linked list
    public boolean search(Node head, int key)
    {
        Node current = head;    //Initialize current
        while (current != null)
        {
            if (current.data == key)
                return true;    //data found
            current = current.next;
        }
        return false;    //data not found
    }

c#

  // Checks whether the value key is present in linked list
    public bool search(Node head, int key)
    {
        Node current = head; // Initialize current
        while (current != null)
        {
            if (current.data == key)
                return true; // data found
            current = current.next;
        }
        return false; // data not found
    } 

递归法:

bool search(head, x)
1)如果head是NULL, return false.
2) 如果head数据域的值和待查找的一致,返回true;
2) 否则返回 search(head->next, x) 

c语言:

/*
    Checks whether the value key is present in linked list
 */
bool searchRecursive(struct Node* head, int key)
{
    if(head == NULL)
    {
        return false;
    }

    //If key is present in current node,
    //return true
    if(head->data == key)
        return true;

    //recursive for remaining list
    return searchRecursive(head->next, key);
}

java:

  // Checks whether the value key is present
    // in linked list
    public boolean search(Node head, int key)
    {
        // Base case
        if (head == null)
            return false; 

        // If key is present in current node,
        // return true
        if (head.data == key)
            return true; 

        // Recur for remaining list
        return search(head.next, key);
    } 

c#

// Checks whether the value key is present
    // in linked list
    public bool search(Node head, int key)
    {
        // Base case
        if (head == null)
            return false; 

        // If key is present in current node,
        // return true
        if (head.data == key)
            return true; 

        // Recur for remaining list
        return search(head.next, key);
    } 

文章来源:https://www.geeksforgeeks.org/search-an-element-in-a-linked-list-iterative-and-recursive/

原文地址:https://www.cnblogs.com/passedbylove/p/11439263.html

时间: 2024-11-03 22:28:15

数据结构:单向链表系列5--在链表中查找元素的相关文章

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

34. 在排序数组中查找元素的第一个和最后一个位置 题目要求用O(logn),明显要用二分. 其实二分不难,难的是要处理好边界 class Solution { public int[] searchRange(int[] nums, int target) { int i = 0, j = nums.length; int mid = (i + j) / 2; int p = -1; while (i < j) { if (nums[mid] == target) { p = mid; bre

LeetCode-在受污染的二叉树中查找元素

在受污染的二叉树中查找元素 LeetCode-1261 /** * 给出一个满足下述规则的二叉树: * root.val == 0 * 如果 treeNode.val == x 且?treeNode.left != null,那么?treeNode.left.val == 2 * x + 1 * 如果 treeNode.val == x 且 treeNode.right != null,那么?treeNode.right.val == 2 * x + 2 * 现在这个二叉树受到「污染」,所有的?

在排序数组中查找元素

/* 34.在排序数组中查找元素的第一个和最后一个位置. 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [-1, -1]. */ #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> #include<mat

React 深入系列1:React 中的元素、组件、实例和节点

文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React. React 中的元素.组件.实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念.现在,老干部就来详细地介绍这4个概念,以及它们之间的联系和区别,满足喜欢咬文嚼字.刨根问底的同学(老干部就是其中一员)的好奇心. 元素 (Element) Rea

杨氏矩阵中查找元素

在杨氏矩阵中查找一个元素是否存在 杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序 方法一:数组 #include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较.如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols

_DataStructure_C_Impl:在顺序表中查找元素

// _DataStructure_C_Impl:Search #include<stdio.h> #include<stdlib.h> #define MaxSize 100 #define IndexSize 20 typedef int KeyType; //元素的定义 typedef struct{ KeyType key; }DataType; //顺序表的类型定义 typedef struct{ DataType list[MaxSize]; int length; }

Leetcode题目34.在排序数组中查找元素的第一个和最后一个位置(中等)

题目描述: 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [-1, -1]. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2: 输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1] 题目解析: 方法 1:线性扫描 对 target 检查每

【LeetCode】34. 在排序数组中查找元素的第一个和最后一个位置

题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是?O(log n) 级别. 如果数组中不存在目标值,返回?[-1, -1]. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例?2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 本题同[剑指Offer]面试题53 - I. 在排序数组

数据结构:单向链表系列8--反转链表

业务需求:给定一个指向头指针的链表,反转链表.实现过程:更改相邻节点之间的链域. 例: 输入: 1->2->3->4->NULL输出:4->3->2->1->NULL 输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL 输入: NULL输出: NULL 输入: 1->NULL输出: 1->NULL 迭代法: 空间复杂度:O(1),时间复杂度:O(n)