Вставить узел после заданного узла в связанном списке
Как и массивы, связанный список представляет собой линейную структуру данных. В отличие от массивов элементы связанного списка не хранятся в непрерывном месте; элементы связаны с помощью указателей. Они включают ряд соединенных узлов. Здесь каждый узел хранит данные и адрес следующего узла.
Чтобы узнать больше о связном списке, обратитесь к статье «Введение в связанный список».
При наличии связанного списка задача состоит в том, чтобы вставить новый узел после заданного узла связанного списка.
Пример:
List = 1->2->4->5, Insert a node with value 3 after the node with value 2.
Output list will be: 1->2->3->4->5
Рассмотрим следующие представления связанного списка.
C++
// A linked list node class Node { public : int data; Node* next; }; |
C
// A linked list node struct Node { int data; struct Node* next; }; |
Java
// Linked List Class class LinkedList { Node head; // head of list /* Node Class */ class Node { int data; Node next; // Constructor to create a new node Node( int d) { data = d; next = null ; } } } |
Python3
# Node class class Node: # Function to initialize the node object def __init__( self , data): self .data = data # Assign data self . next = None # Initialize next as null # Linked List class class LinkedList: # Function to initialize the Linked List object def __init__( self ): self .head = None |
C#
/* Linked list Node*/ public class Node { public int data; public Node next; public Node( int d) { data = d; next = null ; } } |
Javascript
<script> // Linked List Class var head; // head of list /* Node Class */ class Node { // Constructor to create a new node constructor(d) { this .data = d; this .next = null ; } } // This code is contributed by todaysgaurav </script> |
Подход: выполните следующие шаги для вставки узла после заданного узла:
- Во-первых, проверьте, является ли данный предыдущий узел NULL или нет.
- Затем выделите новый узел (скажем, temp ) и
- Назначьте данные для temp .
- А затем сделайте следующий временный узел следующим из предыдущего узла.
- Наконец, переместите следующий из предыдущих узлов, чтобы он указывал на temp .
Следуйте изображению ниже для лучшего понимания.
Ниже приведена реализация подхода.
C++
// Given a node prev_node, insert a // new node after the given // prev_node void insertAfter(Node* prev_node, int new_data) { // 1. Check if the given prev_node is NULL if (prev_node == NULL) { cout << "The given previous node cannot be NULL" ; return ; } // 2. Allocate new node Node* new_node = new Node(); // 3. Put in the data new_node->data = new_data; // 4. Make next of new node as // next of prev_node new_node->next = prev_node->next; // 5. move the next of prev_node // as new_node prev_node->next = new_node; } |
C
/* Given a node prev_node, insert a new node after the given prev_node */ void insertAfter( struct Node* prev_node, int new_data) { /*1. check if the given prev_node is NULL */ if (prev_node == NULL) { printf ( "the given previous node cannot be NULL" ); return ; } /* 2. allocate new node */ struct Node* new_node = ( struct Node*) malloc ( sizeof ( struct Node)); /* 3. put in the data */ new_node->data = new_data; /* 4. Make next of new node as next of prev_node */ new_node->next = prev_node->next; /* 5. move the next of prev_node as new_node */ prev_node->next = new_node; } |
Java
/* This function is in LinkedList class. Inserts a new node after the given prev_node. This method is defined inside LinkedList class shown above */ public void insertAfter(Node prev_node, int new_data) { /* 1. Check if the given Node is null */ if (prev_node == null ) { System.out.println( "The given previous node cannot be null" ); return ; } /* 2. Allocate the Node & 3. Put in the data*/ Node new_node = new Node(new_data); /* 4. Make next of new Node as next of prev_node */ new_node.next = prev_node.next; /* 5. make next of prev_node as new_node */ prev_node.next = new_node; } |
Python3
# This function is in LinkedList class. # Inserts a new node after the given prev_node. This method is # defined inside LinkedList class shown above */ def insertAfter( self , prev_node, new_data): # 1. check if the given prev_node exists if prev_node is None : print ( "The given previous node must inLinkedList." ) return # 2. Create new node & # 3. Put in the data new_node = Node(new_data) # 4. Make next of new Node as next of prev_node new_node. next = prev_node. next # 5. make next of prev_node as new_node prev_node. next = new_node |
C#
/* Inserts a new node after the given prev_node. */ public void insertAfter(Node prev_node, int new_data) { /* 1. Check if the given Node is null */ if (prev_node == null ) { Console.WriteLine( "The given previous node" + " cannot be null" ); return ; } /* 2 & 3: Allocate the Node & Put in the data*/ Node new_node = new Node(new_data); /* 4. Make next of new Node as next of prev_node */ new_node.next = prev_node.next; /* 5. make next of prev_node as new_node */ prev_node.next = new_node; } |
Javascript
<script> /* This function is in LinkedList class. Inserts a new node after the given prev_node. This method is defined inside LinkedList class shown above */ function insertAfter(prev_node, new_data) { /* 1. Check if the given Node is null */ if (prev_node == null ) { document.write( "The given previous node cannot be null" ); return ; } /* 2. Allocate the Node & 3. Put in the data*/ var new_node = new Node(new_data); /* 4. Make next of new Node as next of prev_node */ new_node.next = prev_node.next; /* 5. make next of prev_node as new_node */ prev_node.next = new_node; } // This code is contributed by aashish1995 </script> |
Временная сложность: O(1)
Вспомогательное пространство: O(1)