Implementation of Linked List

Below is the implementation of Linked List in different languages:

C++
// C++ program to show inserting a node
// at front of given Linked List
#include <bits/stdc++.h>
using namespace std;

// A linked list node
class Node {
public:
    int data;
    Node* next;
};

// Given a reference (pointer to pointer)
// to the head of a list and an int, inserts
// a new node on the front of the list.
void insertAtFront(Node** head_ref, int new_data)
{

    // 1. allocate node
    Node* new_node = new Node();

    // 2. put in the data
    new_node->data = new_data;

    // 3. Make next of new node as head
    new_node->next = (*head_ref);

    // 4. move the head to point
    // to the new node
    (*head_ref) = new_node;
}

/* Function to remove the first node 
   of the linked list */
Node* removeFirstNode(Node* head)
{
    if (head == NULL)
        return NULL;
 
    // Move the head pointer to the next node
    Node* temp = head;
    head = head->next;
 
    delete temp;
 
    return head;
}

// This function prints contents of
// linked list starting from head
void printList(Node* node)
{
    while (node != NULL) {
        cout << " " << node->data;
        node = node->next;
    }
    cout << "\n";
}

// Driver code
int main()
{
    // Start with the empty list
    Node* head = NULL;

    // Insert 1 at the beginning.
    insertAtFront(&head, 6);
    insertAtFront(&head, 5);
    insertAtFront(&head, 4);
    insertAtFront(&head, 3);
    insertAtFront(&head, 2);
    insertAtFront(&head, 1);

    cout << "After inserting nodes at the front:";
    printList(head);
  
      head = removeFirstNode(head);
      cout << "After removing first node:";
    printList(head);

    return 0;
}
Java
// Java program to show inserting a node
// at front of given Linked List
import java.io.*;

// A linked list node
class Node {
    int data;
    Node next;
}

// Class to insert element in LL
class LinkedList {
    Node head; // head of list

    // Given a reference (pointer to pointer)
    // to the head of a list and an int, inserts
    // a new node on the front of the list.
    void insertAtFront(int new_data)
    {
        // 1. allocate node
        Node new_node = new Node();

        // 2. put in the data
        new_node.data = new_data;

        // 3. Make next of new node as head
        new_node.next = head;

        // 4. move the head to point
        // to the new node
        head = new_node;
    }

      // Function to remove the first node
    // of the linked list /
    void removeFirstNode()
    {
        if (head == null)
            return;
 
        // Move the head pointer to the next node
        Node temp = head;
        head = head.next;
    }
  
    // This function prints contents of
    // linked list starting from head
    void printList()
    {
        Node node = head;
        while (node != null) {
            System.out.print(node.data + " ");
            node = node.next;
        }
        System.out.println();
    }

    // Driver code
    public static void main(String[] args)
    {
        // Start with the empty list
        LinkedList list = new LinkedList();

        list.insertAtFront(6);
        list.insertAtFront(5);
        list.insertAtFront(4);
        list.insertAtFront(3);
        list.insertAtFront(2);
        list.insertAtFront(1);

        System.out.print("After inserting nodes at the front: ");
        list.printList();
          list.removeFirstNode();
          System.out.print("After removing first node: ");
          list.printList();
    }
}
Python3
# Python3 program to show inserting a node
# at front of given Linked List

# A linked list node
class Node:
    def __init__(self):
        self.data = None
        self.next = None

# Given a reference (pointer to pointer)
# to the head of a list and an int, inserts
# a new node on the front of the list.
def insertAtFront(head_ref, new_data):

    # 1. allocate node
    new_node = Node()

    # 2. put in the data
    new_node.data = new_data

    # 3. Make next of new node as head
    new_node.next = head_ref

    # 4. move the head to point
    # to the new node
    head_ref = new_node

    return head_ref

# Function to remove the first node
# of the linked list
def removeFirstNode(head):
    if not head:
        return None
    temp = head

    # Move the head pointer to the next node
    head = head.next
    temp = None
    return head


# This function prints contents of
# linked list starting from head
def printList(node):
    while (node != None):
        print(node.data, end=" ")
        node = node.next
    print()


# Driver code
if __name__ == '__main__':
    # Start with the empty list
    head = None
    head = insertAtFront(head, 6)
    head = insertAtFront(head, 5)
    head = insertAtFront(head, 4)
    head = insertAtFront(head, 3)
    head = insertAtFront(head, 2)
    head = insertAtFront(head, 1)
    print("After inserting nodes at the front: ", end = "")
    printList(head)
    
    head = removeFirstNode(head)
    print("After removing first node: ", end = "")
    printList(head)
C#
// C# program to show inserting a node
// at front of given Linked List
using System;

class GFG {
    public Node head; // head of list

    /* Linked list Node*/
    public class Node {
        public int data;
        public Node next;
        public Node(int d)
        {
            data = d;
            next = null;
        }
    }

    /* Inserts a new Node at front of the list. */
    public void insertAtFront(int new_data)
    {
        /* 1 & 2: Allocate the Node &
                        Put in the data*/
        Node new_node = new Node(new_data);

        /* 3. Make next of new Node as head */
        new_node.next = head;

        /* 4. Move the head to point to new Node */
        head = new_node;
    }

    // Function to remove the first node
    // of the linked list /
    public void removeFirstNode()
    {
        if (head == null)
            return ;

        // Move the head pointer to the next node
        head = head.next;
    }

    /* This function prints contents of linked list
    starting from the given node */
    public void printList()
    {
        Node tnode = head;
        while (tnode != null) {
            Console.Write(tnode.data + " ");
            tnode = tnode.next;
        }
        Console.WriteLine();
    }

    // Driver Code
    public static void Main(String[] args)
    {
        /* Start with the empty list */
        GFG llist = new GFG();

        llist.insertAtFront(6);
        llist.insertAtFront(5);
        llist.insertAtFront(4);
        llist.insertAtFront(3);
        llist.insertAtFront(2);
        llist.insertAtFront(1);

        Console.Write("After inserting nodes at the front: ");
        llist.printList();

        llist.removeFirstNode();
        Console.Write("After removing first node: ");
        llist.printList();
    }
}
JavaScript
// A linked list node
class Node {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
}

// Given a reference (pointer to pointer)
// to the head of a list and an int, inserts
// a new node on the front of the list.
function insertAtFront(head_ref, new_data) {
    // 1. Create a new node
    const new_node = new Node(new_data);

    // 2. Make the new node point to the current head
    new_node.next = head_ref[0];

    // 3. Update the head to the new node
    head_ref[0] = new_node;
}

// Function to remove the first node
// of the linked list /
function removeFirstNode( head) {
    if (head == null)
        return null;
 
    // Move the head pointer to the next node
    temp = head;
    head = head.next;
 
    return head;
}

// This function prints contents of
// linked list starting from head
function printList(node) {
    let current = node;
    while (current !== null) {
        console.log(" " + current.data);
        current = current.next;
    }
    console.log("\n");
}

// Driver code
function main() {
    // Start with an empty list
    let head = [null]; // Use an array to simulate a pointer to pointer

    // Insert elements at the beginning
    insertAtFront(head, 1);
    insertAtFront(head, 2);
    insertAtFront(head, 3);
    insertAtFront(head, 4);
    insertAtFront(head, 5);
    insertAtFront(head, 6);

    console.log("After inserting Nodes at the front:");
    // The nodes will be: 6 5 4 3 2 1
    printList(head[0]);
 
    head[0] = removeFirstNode(head[0]);
    
    console.log("After removing first node:");
    // The nodes will be: 5 4 3 2 1
    printList(head[0]);
    
}

main();

Output
After inserting nodes at the front: 1 2 3 4 5 6
After removing first node: 2 3 4 5 6

Introduction to Linked List – Data Structure and Algorithm Tutorials

Linked List is basically chains of nodes where each node contains information such as data and a pointer to the next node in the chain. It is a popular data structure with a wide range of real-world applications. In this article, we will provide a complete introduction of Linked List, which will help you tackle any problem based on Linked List.

Table of Content

  • What is a Linked List?
  • Basic Terminologies of Linked List
  • Importance of Linked List
  • Types of Linked List
    • Singly Linked List
    • Doubly Linked List
    • Circular Linked List
  • Implementation of Linked List
  • Linked List vs. Array
  • Advantages of Linked List
  • Disadvantages of Linked List
  • Applications of Linked List
  • Frequently Asked Questions (FAQs) about Linked list

Similar Reads

What is a Linked List?

Linked List is a linear data structure which looks like a series of nodes, where each node has two parts: data and next pointer. Unlike Arrays, Linked List elements are not stored at a contiguous location. In the linked list there is a head pointer, which points to the first element of the linked list, and if the list is empty then it simply points to null or nothing....

Basic Terminologies of Linked List:

Head: The Head of a linked list is a pointer to the first node or reference of the first node of linked list. This pointer marks the beginning of the linked list. Node: Linked List consists of a series of nodes where each node has two parts: data and next pointer. Data: Data is the part of node which stores the information in the linked list.Next pointer: Next pointer is the part of the node which points to the next node of the linked list....

Importance of Linked List:

Here are a few advantages of a linked list that is listed below, it will help you understand why it is necessary to know....

Types of Linked List:

There are mainly three types of linked lists:...

1. Singly Linked List:

Singly Linked List is a type of linked list where each node has two parts: data and next pointer. The data part stores the information and the next pointer points to the next node of the linked list. The next pointer of the last node stores null as it is the last node of the linked list and there is no next node. Traversal of items can be done in the forward direction only due to the linking of every node to its next node....

2. Doubly Linked List:

Doubly Linked List is a type of linked list where each node has three parts: data, next pointer and previous pointer. The data part stores the information, the next pointer points to the next node of the linked list and the previous pointer points to the previous node of the linked list. The next pointer of the last node and the previous pointer of the first node stores null. Traversal of items can be done in the forward direction as well as backward direction due to the linking of every node to its next node as well as the previous node....

3. Circular Linked List:

A circular linked list is a type of linked list in which the first and the last nodes are also connected to each other to form a circle, there is no NULL at the end....

Implementation of Linked List:

Below is the implementation of Linked List in different languages:...

Linked List vs. Array:

Array Linked List Arrays are stored in contiguous location. Linked Lists are not stored in contiguous location. Fixed size. Dynamic Size Memory is allocated at compile time. Memory is allocated at run time. Uses less memory than Linked Lists. Uses more memory than Arrays as it stores both data and address of next node. Elements can be accessed easily in O(1) time. Elements can be access by traversing through all the nodes till we reach the required node. Insertion and deletion operation is slower than Linked List. Insertion and deletion operation is faster than Linked List....

Time Complexity Analysis of Linked List and Array:

OperationLinked listArrayRandom AccessO(N)O(1)Insertion and deletion at beginningO(1)O(N)Insertion and deletion at endO(N)O(1)Insertion and deletion at a random positionO(N)O(N)...

Advantages of Linked List:

Dynamic nature: Linked lists are used for dynamic memory allocation.Memory efficient: Memory consumption of a linked list is efficient as its size can grow or shrink dynamically according to our requirements, which means effective memory utilization hence, no memory wastage.Ease of Insertion and Deletion: Insertion and deletion of nodes are easily implemented in a linked list at any position.Implementation: For the implementation of stacks and queues and for the representation of trees and graphs.The linked list can be expanded in constant time....

Disadvantages of Linked List:

Memory usage: The use of pointers is more in linked lists hence, complex and requires more memory.Accessing a node: Random access is not possible due to dynamic memory allocation.Search operation costly: Searching for an element is costly and requires O(n) time complexity.Traversing in reverse order: Traversing is more time-consuming and reverse traversing is not possible in singly linked lists....

Applications of Linked List:

Here are some of the applications of a linked list:...

Frequently Asked Questions (FAQs) about Linked List:

1. What is linked list data structure?...

Conclusion:

There are many advantages of the linked list compared to array, despite the fact that they solve the similar problem to arrays, we have also discussed the advantage, disadvantages, and its application, and we concluded the fact that we can use a linked list if we need the dynamic size of storage and list are good for adding and removing items quickly or for tasks that require sequence but are not suitable for querying or search elements in a large collection of data....

Contact Us