How to do insertion sort on a singly linked list with no hea

How to do insertion sort on a singly linked list with no header using C?

Solution

/* C program for insertion sort on a linked list */

#include<stdio.h>

#include<stdlib.h>

/* Link list node */

struct node

{

    int data;

    struct node* next;

};

// Function to insert a given node in a sorted linked list

void sortedInsert(struct node**, struct node*);

// function to sort a singly linked list using insertion sort

void insertionSort(struct node **head_ref)

{

    // Initialize sorted linked list

    struct node *sorted = NULL;

    // Traverse the given linked list and insert every

    // node to sorted

    struct node *current = *head_ref;

    while (current != NULL)

    {

        // Store next for next iteration

        struct node *next = current->next;

        // insert current in sorted linked list

        sortedInsert(&sorted, current);

        // Update current

        current = next;

    }

    // Update head_ref to point to sorted linked list

    *head_ref = sorted;

}

/* function to insert a new_node in a list. Note that this

  function expects a pointer to head_ref as this can modify the

  head of the input linked list (similar to push())*/

void sortedInsert(struct node** head_ref, struct node* new_node)

{

    struct node* current;

    /* Special case for the head end */

    if (*head_ref == NULL || (*head_ref)->data >= new_node->data)

    {

        new_node->next = *head_ref;

        *head_ref = new_node;

    }

    else

    {

        /* Locate the node before the point of insertion */

        current = *head_ref;

        while (current->next!=NULL &&

               current->next->data < new_node->data)

        {

            current = current->next;

        }

        new_node->next = current->next;

        current->next = new_node;

    }

}

/* BELOW FUNCTIONS ARE JUST UTILITY TO TEST sortedInsert */

/* Function to print linked list */

void printList(struct node *head)

{

    struct node *temp = head;

    while(temp != NULL)

    {

        printf(\"%d \", temp->data);

        temp = temp->next;

    }

}

/* A utility function to insert a node at the beginning of linked list */

void push(struct node** head_ref, int new_data)

{

    /* allocate node */

    struct node* new_node = new node;

    /* put in the data */

    new_node->data = new_data;

    /* link the old list off the new node */

    new_node->next = (*head_ref);

    /* move the head to point to the new node */

    (*head_ref)    = new_node;

}

// Driver program to test above functions

int main()

{

    struct node *a = NULL;

    push(&a, 5);

    push(&a, 20);

    push(&a, 4);

    push(&a, 3);

    push(&a, 30);

    printf(\"Linked List before sorting \ \");

    printList(a);

    insertionSort(&a);

    printf(\"\ Linked List after sorting \ \");

    printList(a);

    return 0;

}

/* C program for insertion sort on a linked list */

#include<stdio.h>

#include<stdlib.h>

/* Link list node */

struct node

{

    int data;

    struct node* next;

};

// Function to insert a given node in a sorted linked list

void sortedInsert(struct node**, struct node*);

// function to sort a singly linked list using insertion sort

void insertionSort(struct node **head_ref)

{

    // Initialize sorted linked list

    struct node *sorted = NULL;

    // Traverse the given linked list and insert every

    // node to sorted

    struct node *current = *head_ref;

    while (current != NULL)

    {

        // Store next for next iteration

        struct node *next = current->next;

        // insert current in sorted linked list

        sortedInsert(&sorted, current);

        // Update current

        current = next;

    }

    // Update head_ref to point to sorted linked list

    *head_ref = sorted;

}

/* function to insert a new_node in a list. Note that this

  function expects a pointer to head_ref as this can modify the

  head of the input linked list (similar to push())*/

void sortedInsert(struct node** head_ref, struct node* new_node)

{

    struct node* current;

    /* Special case for the head end */

    if (*head_ref == NULL || (*head_ref)->data >= new_node->data)

    {

        new_node->next = *head_ref;

        *head_ref = new_node;

    }

    else

    {

        /* Locate the node before the point of insertion */

        current = *head_ref;

        while (current->next!=NULL &&

               current->next->data < new_node->data)

        {

            current = current->next;

        }

        new_node->next = current->next;

        current->next = new_node;

    }

}

/* BELOW FUNCTIONS ARE JUST UTILITY TO TEST sortedInsert */

/* Function to print linked list */

void printList(struct node *head)

{

    struct node *temp = head;

    while(temp != NULL)

    {

        printf(\"%d \", temp->data);

        temp = temp->next;

    }

}

/* A utility function to insert a node at the beginning of linked list */

void push(struct node** head_ref, int new_data)

{

    /* allocate node */

    struct node* new_node = new node;

    /* put in the data */

    new_node->data = new_data;

    /* link the old list off the new node */

    new_node->next = (*head_ref);

    /* move the head to point to the new node */

    (*head_ref)    = new_node;

}

// Driver program to test above functions

int main()

{

    struct node *a = NULL;

    push(&a, 5);

    push(&a, 20);

    push(&a, 4);

    push(&a, 3);

    push(&a, 30);

    printf(\"Linked List before sorting \ \");

    printList(a);

    insertionSort(&a);

    printf(\"\ Linked List after sorting \ \");

    printList(a);

    return 0;

}

How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc
How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc
How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc
How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc
How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc
How to do insertion sort on a singly linked list with no header using C?Solution/* C program for insertion sort on a linked list */ #include<stdio.h> #inc

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site