LL 1 - Single Linked List

Chetan DattaChetan Datta
3 min read

Construction of Linked List

Input:
n = 5
arr = [1,2,3,4,5]
Output:
1 2 3 4 5
Explanation: Linked list for the given array will be 1->2->3->4->5

Here, the head points to a dummy which doesn't store anything. Later, when we return the new head pointer, we simply use head.next and send it.

If we don't want to use dummy node, then we need to manually create the node using the first element of the array. After that, we iterate through the remaining elements, and creating nodes for each one.

    public static Node constructLL(int arr[]){
        Node head = new Node();

        Node temp = head;
        for(int num: arr){
            temp.next = new Node(num);
            temp = temp.next;
        }

        return head.next;
    }

Node class

public class Node {
    public int val;
    public Node next;

    public Node() {
    }

    public Node(int val) {
        this.val = val;
    }
}

Search in Linked List

    boolean searchKey(int n, Node head, int key) {
        Node temp = head;
        while(temp!=null){
            if(temp.data==key) return true;
            temp = temp.next;
        }
        return false;
    }

Length of Linked List

class Solution {
    public int getCount(Node head) {
        int length = 0;
        Node temp = head;
        while(temp!=null){
            length+=1;
            temp = temp.next;
        }
        return length;
    }
}

Deletion of Node

Delete the first Node

    static Node deleteFirst(Node head) {
        if(head==null) return null;
        return head.next;
    }

Delete the Last Node

Stop the iteration before the last 2nd node.

Conditions to stop on

  • last node: temp.next!=null

  • 2nd last node: temp.next.next!=null

class Solution {
    static Node deleteLast(Node head) {
        if(head==null || head.next==null) return null;

        Node temp = head;
        while(temp.next.next!=null){
            temp = temp.next;
        }
        temp.next = null;
        return head;
    }
}

Delete the kth Node

    static Node deleteNode(Node head, int index) {
        if(head==null) return null;
        if(index==1) return head.next;

        int i = 1;
        Node temp = head;

        while(i<(index-1) && temp!=null){
            temp = temp.next;
            i+=1;
        }

        if(temp!=null && temp.next!=null)
            temp.next = temp.next.next;

        return head;
    }

Insertion of Node

Insert at First

    public static Node insertFirst(Node head, int x) {
        Node newNode = new Node(x);
        if(head==null) return newNode;

        newNode.next = head;
        return newNode;
    }

Insert at Last

    static Node insertLast(Node head, int x) {
        Node newNode = new Node(x);

        if(head==null) return newNode;

        Node temp = head;
        while(temp.next!=null){
            temp = temp.next;
        }
        temp.next = newNode;

        return head;
    }

Insert at kth Node

    static Node insertAtIndex(Node head, int index, int x) {
        Node newNode = new Node(x);

        if(head==null) return newNode;
        if(index==1){
            newNode.next = head;
            return newNode;
        }

        Node temp = head;
        int i = 1;
        while(i<(index-1) && temp!=null){
            temp = temp.next;
            i+=1;
        }

        if(temp!=null){
            newNode.next = temp.next;
            temp.next = newNode;
        }
        return head;
    }
0
Subscribe to my newsletter

Read articles from Chetan Datta directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Chetan Datta
Chetan Datta

I'm someone deeply engrossed in the world of software developement, and I find joy in sharing my thoughts and insights on various topics. You can explore my exclusive content here, where I meticulously document all things tech-related that spark my curiosity. Stay connected for my latest discoveries and observations.