Вставить узел в определенное место в связанном списке
Опубликовано: 24 Января, 2022
Учитывая односвязный список, позицию и элемент, задача состоит в том, чтобы написать программу для вставки этого элемента в связанный список в заданную позицию.
Примеры:
Ввод: 3-> 5-> 8-> 10, данные = 2, позиция = 2 Вывод: 3-> 2-> 5-> 8-> 10 Ввод: 3-> 5-> 8-> 10, data = 11, position = 5 Вывод: 3-> 5-> 8-> 10-> 11
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Подход: Чтобы вставить данные в указанную позицию, необходимо следовать приведенному ниже алгоритму:
- Переместитесь по связному списку вверх до узлов позиции 1.
- Как только все узлы позиции 1 пройдены, выделите память и данные новому узлу.
- Направьте следующий указатель нового узла на следующий из текущего узла.
- Направьте следующий указатель текущего узла на новый узел.
Below is the implementation of the above algorithm.
C++
// C++ program for insertion in a single linked// list at a specified position#include <bits/stdc++.h>using namespace std;// A linked list Nodestruct Node { int data; struct Node* next;};// Size of linked listint size = 0;// function to create and return a NodeNode* getNode(int data){ // allocating space Node* newNode = new Node(); // inserting the required data newNode->data = data; newNode->next = NULL; return newNode;}// function to insert a Node at required positionvoid insertPos(Node** current, int pos, int data){ // This condition to check whether the // position given is valid or not. if (pos < 1 || pos > size + 1) cout << "Invalid position!" << endl; else { // Keep looping until the pos is zero while (pos--) { if (pos == 0) { // adding Node at required position Node* temp = getNode(data); // Making the new Node to point to // the old Node at the same position temp->next = *current; // Changing the pointer of the Node previous // to the old Node to point to the new Node *current = temp; } else // Assign double pointer variable to point to the // pointer pointing to the address of next Node current = &(*current)->next; } size++; }}// This function prints contents// of the linked listvoid printList(struct Node* head){ while (head != NULL) { cout << " " << head->data; head = head->next; } cout << endl;}// Driver Codeint main(){ // Creating the list 3->5->8->10 Node* head = NULL; head = getNode(3); head->next = getNode(5); head->next->next = getNode(8); head->next->next->next = getNode(10); size = 4; cout << "Linked list before insertion: "; printList(head); int data = 12, pos = 3; insertPos(&head, pos, data); cout << "Linked list after insertion of 12 at position 3: "; printList(head); // front of the linked list data = 1, pos = 1; insertPos(&head, pos, data); cout << "Linked list after insertion of 1 at position 1: "; printList(head); // insetion at end of the linked list data = 15, pos = 7; insertPos(&head, pos, data); cout << "Linked list after insertion of 15 at position 7: "; printList(head); return 0;} |
Java
// Java program for insertion in a single linked// list at a specified positionclass GFG { // A linked list Node static class Node { public int data; public Node nextNode; // inserting the required data public Node(int data) { this.data = data; } } // function to create and return a Node static Node GetNode(int data) { return new Node(data); } // function to insert a Node at required position static Node InsertPos(Node headNode, int position, int data) { Node head = headNode; if (position < 1) System.out.print("Invalid position"); // if position is 1 then new node is // set infornt of head node // head node is changing. if (position == 1) { Node newNode = new Node(data); newNode.nextNode = headNode; head = newNode; } else { while (position-- != 0) { if (position == 1) { // adding Node at required position Node newNode = GetNode(data); // Making the new Node to point to // the old Node at the same position newNode.nextNode = headNode.nextNode; // Replacing current with new Node // to the old Node to point to the new Node headNode.nextNode = newNode; break; } headNode = headNode.nextNode; } if (position != 1) System.out.print("Position out of range"); } return head; } static void PrintList(Node node) { while (node != null) { System.out.print(node.data); node = node.nextNode; if (node != null) System.out.print(","); } System.out.println(); } // Driver code public static void main(String[] args) { Node head = GetNode(3); head.nextNode = GetNode(5); head.nextNode.nextNode = GetNode(8); head.nextNode.nextNode.nextNode = GetNode(10); System.out.print("Linked list before insertion: "); PrintList(head); int data = 12, pos = 3; head = InsertPos(head, pos, data); System.out.print("Linked list after" + " insertion of 12 at position 3: "); PrintList(head); // front of the linked list data = 1; pos = 1; head = InsertPos(head, pos, data); System.out.print("Linked list after" + "insertion of 1 at position 1: "); PrintList(head); // insetion at end of the linked list data = 15; pos = 7; head = InsertPos(head, pos, data); System.out.print("Linked list after" + " insertion of 15 at position 7: "); PrintList(head); }}// This code is contributed by Rajput-Ji |
Python3
# Python3 program for insertion in a single linked# list at a specified position # A linked list Nodeclass Node: def __init__(self, data): self.data = data self.nextNode = None # function to create and return a Nodedef getNode(data): # allocating space newNode = Node(data) return newNode;# function to insert a Node at required positiondef insertPos(headNode, position, data): head = headNode # This condition to check whether the # position given is valid or not. if (position < 1): print("Invalid position!") if position == 1: newNode = Node(data) newNode.nextNode = headNode head = newNode else: # Keep looping until the position is zero while (position != 0): position -= 1 if (position == 1): # adding Node at required position newNode = getNode(data) # Making the new Node to point to # the old Node at the same position newNode.nextNode = headNode.nextNode # Replacing headNode with new Node # to the old Node to point to the new Node headNode.nextNode = newNode break headNode = headNode.nextNode if headNode == None: break if position != 1: print("position out of range") return head # This function prints contents# of the linked listdef printList(head): while (head != None): print(" " + str(head.data), end = "") head = head.nextNode; print() # Driver Codeif __name__=="__main__": # Creating the list 3.5.8.10 head = getNode(3); head.nextNode = getNode(5); head.nextNode.nextNode = getNode(8); head.nextNode.nextNode.nextNode = getNode(10); print("Linked list before insertion: ", end="") printList(head); data = 12 position = 3; head = insertPos(head, position, data); print("Linked list after insertion of 12 at position 3: ", end = "") printList(head); # front of the linked list data = 1 position = 1; head = insertPos(head, position, data); print("Linked list after insertion of 1 at position 1: ", end = "") printList(head); # insetion at end of the linked list data = 15 position = 7; head = insertPos(head, position, data); print("Linked list after insertion of 15 at position 7: ", end="") printList(head);# This code iscontributed by rutvik_56 |
C#
// C# program for insertion in a single linked// list at a specified positionusing System;namespace InsertIntoLinkedList{ class Program { // A linked list Node private class Node { public int data; public Node nextNode; // inserting the required data public Node(int data) => this.data = data; } // function to create and return a Node static Node GetNode(int data) => new Node(data); // function to insert a Node at required position static Node InsertPos(Node headNode, int position, int data) { var head = headNode; if (position < 1) Console.WriteLine("Invalid position"); //if position is 1 then new node is // set infornt of head node //head node is changing. if (position == 1) { var newNode = new Node(data); newNode.nextNode = headNode; head = newNode; } else { while (position-- != 0) { if (position == 1) { // adding Node at required position Node newNode = GetNode(data); // Making the new Node to point to // the old Node at the same position newNode.nextNode = headNode.nextNode; &n
РЕКОМЕНДУЕМЫЕ СТАТЬИ |