📜  在双向链接列表中搜索元素

📅  最后修改于: 2021-04-23 06:23:01             🧑  作者: Mango

给定包含N个节点和整数X的双链表(DLL),任务是查找整数X在双链表中的位置。如果找不到这样的位置,则打印-1

例子:

方法:请按照以下步骤解决问题:

  • 初始化一个变量pos ,以将包含数据值X的节点的位置存储在双向链表中。
  • 初始化一个名为temp的指针,以存储双向链表的头节点
  • 遍历链接列表,对于每个节点,检查该节点的数据值是否等于X。如果发现是真的,则打印pos
  • 否则,打印-1

下面是上述方法的实现

C++
// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Structure of a node of
// the doubly linked list
struct Node {
 
    // Stores data value
    // of a node
    int data;
 
    // Stores pointer
    // to next node
    Node* next;
 
    // Stores pointer
    // to previous node
    Node* prev;
};
 
// Function to insert a node at the
// beginning of the Doubly Linked List
void push(Node** head_ref, int new_data)
{
 
    // Allocate memory for new node
    Node* new_node
        = (Node*)malloc(sizeof(struct Node));
 
    // Insert the data
    new_node->data = new_data;
 
    // Since node is added at the
    // beginning, prev is always NULL
    new_node->prev = NULL;
 
    // Link the old list to the new node
    new_node->next = (*head_ref);
 
    // If pointer to head is not NULL
    if ((*head_ref) != NULL) {
 
        // Change the prev of head
        // node to new node
        (*head_ref)->prev = new_node;
    }
 
    // Move the head to point to the new node
    (*head_ref) = new_node;
}
 
// Function to find the position of
// an integer in doubly linked list
int search(Node** head_ref, int x)
{
 
    // Stores head Node
    Node* temp = *head_ref;
 
    // Stores position of the integer
    // in the doubly linked list
    int pos = 0;
 
    // Traverse the doubly linked list
    while (temp->data != x
           && temp->next != NULL) {
 
        // Update pos
        pos++;
 
        // Update temp
        temp = temp->next;
    }
 
    // If the integer not present
    // in the doubly linked list
    if (temp->data != x)
        return -1;
 
    // If the integer present in
    // the doubly linked list
    return (pos + 1);
}
 
// Driver Code
int main()
{
    Node* head = NULL;
    int X = 8;
 
    // Create the doubly linked list
    // 18 <-> 15 <-> 8 <-> 9 <-> 14
    push(&head, 14);
    push(&head, 9);
    push(&head, 8);
    push(&head, 15);
    push(&head, 18);
 
    cout << search(&head, X);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
class GFG
{
   
  // Structure of a node of
  // the doubly linked list
  static class Node
  {
    // Stores data value
    // of a node
    int data;
     
    // Stores pointer
    // to next node
    Node next;
     
    // Stores pointer
    // to previous node
    Node prev;
  };
   
  // Function to insert a node at the
  // beginning of the Doubly Linked List
  static Node push(Node head_ref, int new_data)
  {
     
    // Allocate memory for new node
    Node new_node = new Node();
     
    // Insert the data
    new_node.data = new_data;
     
    // Since node is added at the
    // beginning, prev is always null
    new_node.prev = null;
     
    // Link the old list to the new node
    new_node.next = head_ref;
     
    // If pointer to head is not null
    if (head_ref != null)
    {
       
      // Change the prev of head
      // node to new node
      head_ref.prev = new_node;
    }
     
    // Move the head to point to the new node
    head_ref = new_node;
    return head_ref;
  }
   
  // Function to find the position of
  // an integer in doubly linked list
  static int search(Node head_ref, int x)
  {
     
    // Stores head Node
    Node temp = head_ref;
     
    // Stores position of the integer
    // in the doubly linked list
    int pos = 0;
     
    // Traverse the doubly linked list
    while (temp.data != x
               && temp.next != null)
    {
      // Update pos
      pos++;
       
      // Update temp
      temp = temp.next;
    }
     
    // If the integer not present
    // in the doubly linked list
    if (temp.data != x)
      return -1;
    // If the integer present in
    // the doubly linked list
    return (pos + 1);
  }
   
  // Driver Code
  public static void main(String[] args)
  {
    Node head = null;
    int X = 8;
    // Create the doubly linked list
    // 18 <-> 15 <-> 8 <-> 9 <-> 14
    head = push(head, 14);
    head = push(head, 9);
    head = push(head, 8);
    head = push(head, 15);
    head = push(head, 18);
    System.out.print(search(head, X));
  }
}
 
// This code is contributed by Rajput-Ji


C#
// C# program to implement
// the above approach
using System;
 
class GFG{
   
// Structure of a node of
// the doubly linked list
public class Node
{
     
    // Stores data value
    // of a node
    public int data;
     
    // Stores pointer
    // to next node
    public Node next;
     
    // Stores pointer
    // to previous node
    public Node prev;
};
 
// Function to insert a node at the
// beginning of the Doubly Linked List
static Node push(Node head_ref, int new_data)
{
     
    // Allocate memory for new node
    Node new_node = new Node();
     
    // Insert the data
    new_node.data = new_data;
     
    // Since node is added at the
    // beginning, prev is always null
    new_node.prev = null;
     
    // Link the old list to the new node
    new_node.next = head_ref;
     
    // If pointer to head is not null
    if (head_ref != null)
    {
         
        // Change the prev of head
        // node to new node
        head_ref.prev = new_node;
    }
     
    // Move the head to point to the new node
    head_ref = new_node;
    return head_ref;
}
 
// Function to find the position of
// an integer in doubly linked list
static int search(Node head_ref, int x)
{
     
    // Stores head Node
    Node temp = head_ref;
     
    // Stores position of the integer
    // in the doubly linked list
    int pos = 0;
     
    // Traverse the doubly linked list
    while (temp.data != x &&
           temp.next != null)
    {
         
        // Update pos
        pos++;
         
        // Update temp
        temp = temp.next;
    }
     
    // If the integer not present
    // in the doubly linked list
    if (temp.data != x)
        return -1;
         
    // If the integer present in
    // the doubly linked list
    return (pos + 1);
}
 
// Driver Code
public static void Main(String[] args)
{
    Node head = null;
    int X = 8;
     
    // Create the doubly linked list
    // 18 <-> 15 <-> 8 <-> 9 <-> 14
    head = push(head, 14);
    head = push(head, 9);
    head = push(head, 8);
    head = push(head, 15);
    head = push(head, 18);
     
    Console.Write(search(head, X));
}
}
 
// This code is contributed by gauravrajput1


输出:
3

时间复杂度: O(N)
辅助空间: O(1)