Instagram
youtube
Facebook
Twitter

Insert a node at a specific position in a linked list| Linked List

Task(easy)

Given the pointer to the head node of a linked list and an integer to insert at a certain position, create a new node with the given integer as its data attribute, insert this node at the desired position and return the head node. A position of 0 indicates head, a position of 1 indicates one node away from the head and so on. The head pointer given may be null meaning that the initial list is empty.

Example
head refers to the first node in the list 1->2->3

Data=4

Position=2

Insert a node at position 2 with data=4. The new list is 1->2->4->3

Function Description Complete the function insertNodeAtPosition in the editor below. It must return a reference to the head node of your finished list.

insertNodeAtPosition has the following parameters:

  • head: a SinglyLinkedListNode pointer to the head of the list
  • data: an integer value to insert as data in your new node
  • position: an integer position to insert the new node, zero based indexing

Returns

  • SinglyLinkedListNode pointer: a reference to the head of the revised list

Input Format

The first line contains an integer n, the number of elements in the linked list.
Each of the next n lines contains an integer SinglyLinkedListNode[i].data.
The next line contains an integer data, the data of the node that is to be inserted.
The last line contains an integer position.

Constraints

1<n<1000
1< SinglyLinkedListNode[i].data<1000, where SinglyLinkedListNode[i] is the element of the linked list.
0<position<n

Sample Input

3

16

13

7

1

2

Sample Output

16 13 1 7

Solution 1

def insertNodeAtPosition(llist, data, position):

    node = llist

    for _ in range(position - 1):

        node = node.next

    _next = node.next

    new = SinglyLinkedListNode(data)

    node.next, new.next = new, _next    

    return llist

Solution 2

def insertNodeAtPosition(llist, data, position):

    size_list = 0

    node = SinglyLinkedListNode(data)

    head = llist

    while llist.next:

        size_list+=1

        if size_list == position:

            node.next = llist.next

            llist.next = node

            return head

        else:

            llist = llist.next

    return head

Explanation Steps

1.Create a new node with the desired data.

2.Check if the position is 0 (insert at the head) or traverse to the node just before the desired position.

3.Update pointers to insert the new node in the correct position.