Skip to main content

LINKED LIST -- INSERTING NODE AT THE TAIL OF THE LIST

 

LINKED LIST -- INSERTING NODE AT THE TAIL OF THE LIST


QUESTION:

You are given the pointer to the head node of a linked list and an integer to add to the list. Create a new node with the given integer. Insert this node at the tail of the linked list and return the head node of the linked list formed after inserting this new node. The given head pointer may be null, meaning that the initial list is empty.

Function Description

Complete the insertNodeAtTail function in the editor below.

insertNodeAtTail has the following parameters:

  • SinglyLinkedListNode pointer head: a reference to the head of a list
  • int data: the data value for the node to insert

Returns

  • SinglyLinkedListNode pointer: reference to the head of the modified linked list

Input Format

The first line contains an integer , the number of elements in the linked list.
The next  lines contain an integer each, the value that needs to be inserted at tail.

Constraints

Sample Input

STDIN Function ----- -------- 5 size of linked list n = 5 141 linked list data values 141..474 302 164 530 474

Sample Output

141
302
164
530
474

Explanation

First the linked list is NULL. After inserting 141, the list is 141 -> NULL.
After inserting 302, the list is 141 -> 302 -> NULL.
After inserting 164, the list is 141 -> 302 -> 164 -> NULL.
After inserting 530, the list is 141 -> 302 -> 164 -> 530 -> NULL. After inserting 474, the list is 141 -> 302 -> 164 -> 530 -> 474 -> NULL, which is the final list


SOLUTION


SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {
SinglyLinkedListNode* newnode=(SinglyLinkedListNode*)malloc(sizeof(SinglyLinkedListNode));
SinglyLinkedListNode* temp=(SinglyLinkedListNode*)malloc(sizeof(SinglyLinkedListNode));
newnode->data=data;
temp=head;
if(head==NULL){
   newnode->next=NULL;
   head=newnode; 
}
else{
    while(temp!=NULL){
            if(temp->next==NULL){
                temp->next=newnode;
                newnode->next=NULL;
            }
    temp=temp->next;
    }
}
return head;
}

int main()
{
    FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");

    SinglyLinkedList* llist = malloc(sizeof(SinglyLinkedList));
    llist->head = NULL;
  
    char* llist_count_endptr;
    char* llist_count_str = readline();
    int llist_count = strtol(llist_count_str, &llist_count_endptr, 10);

    if (llist_count_endptr == llist_count_str || *llist_count_endptr != '\0') { exit(EXIT_FAILURE); }

    for (int i = 0; i < llist_count; i++) {
        char* llist_item_endptr;
        char* llist_item_str = readline();
        int llist_item = strtol(llist_item_str, &llist_item_endptr, 10);

        if (llist_item_endptr == llist_item_str || *llist_item_endptr != '\0') { exit(EXIT_FAILURE); }

        SinglyLinkedListNode* llist_head = insertNodeAtTail(llist->head, llist_item);
        llist->head = llist_head;
    }



    char *sep = "\n";

    print_singly_linked_list(llist->head, sep, fptr);
    fprintf(fptr, "\n");

    free_singly_linked_list(llist->head);

    fclose(fptr);

    return 0;
}

char* readline() {
    size_t alloc_length = 1024;
    size_t data_length = 0;
    char* data = malloc(alloc_length);

    while (true) {
        char* cursor = data + data_length;
        char* line = fgets(cursor, alloc_length - data_length, stdin);

        if (!line) {
            break;
        }

        data_length += strlen(cursor);

        if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') {
            break;
        }

        alloc_length <<= 1;

        data = realloc(data, alloc_length);

        if (!line) {
            break;
        }
    }

    if (data[data_length - 1] == '\n') {
        data[data_length - 1] = '\0';

        data = realloc(data, data_length);
    } else {
        data = realloc(data, data_length + 1);

        data[data_length] = '\0';
    }

    return data;
}

Comments

Popular posts from this blog

POST ORDER TRAVERSAL -- HACKERRANK SOLUTIONS

  Complete the   function in the editor below. It received   parameter: a pointer to the root of a binary tree. It must print the values in the tree's postorder traversal as a single line of space-separated values. Input Format Our test code passes the root node of a binary tree to the   function. Constraints   Nodes in the tree    Output Format Print the tree's postorder traversal as a single line of space-separated values. Sample Input 1 \ 2 \ 5 / \ 3 6 \ 4 Sample Output 4 3 6 5 2 1 Explanation The postorder traversal is shown. Solution #include   < stdio.h > #include   < string.h > #include   < math.h > #include   < stdlib.h > struct  node {           int  data;      struct  node *left;      struct  node *ri...

HACKERRANK -- DELETE A NODE AT A GIVEN POSITION

  HACKERRANK --  DELETE A NODE AT A GIVEN POSITION Delete the node at a given position in a linked list and return a reference to the head node. The head is at position 0. The list may be empty after you delete the node. In that case, return a null value. Example After removing the node at position  ,  . Function Description Complete the  deleteNode  function in the editor below. deleteNode  has the following parameters: -  SinglyLinkedListNode pointer llist:  a reference to the head node in the list -  int position:  the position of the node to remove Returns -  SinglyLinkedListNode pointer:  a reference to the head of the modified list Input Format The first line of input contains an integer  , the number of elements in the linked list. Each of the next   lines contains an integer, the node data values in order. The last line contains an integer,  , the position of the node to delete. Constraints , wh...

TREE PREORDER TRAVERSAL -- HACKERRANK SOLUTIONS

  Complete the   function in the editor below, which has   parameter: a pointer to the root of a binary tree. It must print the values in the tree's preorder traversal as a single line of space-separated values. Input Format Our test code passes the root node of a binary tree to the  preOrder  function. Constraints  Nodes in the tree  Output Format Print the tree's preorder traversal as a single line of space-separated values. Sample Input 1 \ 2 \ 5 / \ 3 6 \ 4 Sample Output 1 2 5 3 4 6 Explanation The preorder traversal of the binary tree is printed. Solution #include   < stdio.h > #include   < string.h > #include   < math.h > #include   < stdlib.h > struct  node {           int  data;      struct  node *left;      struct ...