Latest Apps

Home Computer Science

Create Linked List in C Using Function

    Hey students, if you are learning for C language and trying to Create Linked List in C Using Function But you do not know in detail about it. Don't Worry, In this post I teach you about Linked List Creation In C.

    Create Linked List in C

    First of all try to understand 'what is Linked List in C'.

    What is Linked List?

    In C language, Linked List is a linear sequence of data structure which is connected through the Links. Linked List is the dynamic sequence of links that contains items. All the links have connections to each other.

    How to Create Linked List in C?

    Simply Create Linked List in C using Function:
    Implement the following program in C: -
    #include 
    #include 
    #include 
    #include 
    
    struct node {
       int data;
       int key;
       struct node *next;
    };
    
    struct node *head = NULL;
    struct node *current = NULL;
    
    //display the list
    void printList() {
       struct node *ptr = head;
       printf("\n[ ");
     
       //start from the beginning
       while(ptr != NULL) {
          printf("(%d,%d) ",ptr->key,ptr->data);
          ptr = ptr->next;
       }
     
       printf(" ]");
    }
    
    //insert link at the first location
    void insertFirst(int key, int data) {
       //create a link
       struct node *link = (struct node*) malloc(sizeof(struct node));
     
       link->key = key;
       link->data = data;
     
       //point it to old first node
       link->next = head;
     
       //point first to new first node
       head = link;
    }
    
    //delete first item
    struct node* deleteFirst() {
    
       //save reference to first link
       struct node *tempLink = head;
     
       //mark next to first link as first 
       head = head->next;
     
       //return the deleted link
       return tempLink;
    }
    
    //is list empty
    bool isEmpty() {
       return head == NULL;
    }
    
    int length() {
       int length = 0;
       struct node *current;
     
       for(current = head; current != NULL; current = current->next) {
          length++;
       }
     
       return length;
    }
    
    //find a link with given key
    struct node* find(int key) {
    
       //start from the first link
       struct node* current = head;
    
       //if list is empty
       if(head == NULL) {
          return NULL;
       }
    
       //navigate through list
       while(current->key != key) {
     
          //if it is last node
          if(current->next == NULL) {
             return NULL;
          } else {
             //go to next link
             current = current->next;
          }
       }      
     
       //if data found, return the current Link
       return current;
    }
    
    //delete a link with given key
    struct node* delete(int key) {
    
       //start from the first link
       struct node* current = head;
       struct node* previous = NULL;
     
       //if list is empty
       if(head == NULL) {
          return NULL;
       }
    
       //navigate through list
       while(current->key != key) {
    
          //if it is last node
          if(current->next == NULL) {
             return NULL;
          } else {
             //store reference to current link
             previous = current;
             //move to next link
             current = current->next;
          }
       }
    
       //found a match, update the link
       if(current == head) {
          //change first to point to next link
          head = head->next;
       } else {
          //bypass the current link
          previous->next = current->next;
       }    
     
       return current;
    }
    
    void sort() {
    
       int i, j, k, tempKey, tempData;
       struct node *current;
       struct node *next;
     
       int size = length();
       k = size ;
     
       for ( i = 0 ; i < size - 1 ; i++, k-- ) {
          current = head;
          next = head->next;
      
          for ( j = 1 ; j < k ; j++ ) {   
    
             if ( current->data > next->data ) {
                tempData = current->data;
                current->data = next->data;
                next->data = tempData;
    
                tempKey = current->key;
                current->key = next->key;
                next->key = tempKey;
             }
       
             current = current->next;
             next = next->next;
          }
       }   
    }
    
    void reverse(struct node** head_ref) {
       struct node* prev   = NULL;
       struct node* current = *head_ref;
       struct node* next;
     
       while (current != NULL) {
          next  = current->next;
          current->next = prev;   
          prev = current;
          current = next;
       }
     
       *head_ref = prev;
    }
    
    void main() {
       insertFirst(1,10);
       insertFirst(2,20);
       insertFirst(3,30);
       insertFirst(4,1);
       insertFirst(5,40);
       insertFirst(6,56); 
    
       printf("Original List: "); 
     
       //print list
       printList();
    
       while(!isEmpty()) {            
          struct node *temp = deleteFirst();
          printf("\nDeleted value:");
          printf("(%d,%d) ",temp->key,temp->data);
       }  
     
       printf("\nList after deleting all items: ");
       printList();
       insertFirst(1,10);
       insertFirst(2,20);
       insertFirst(3,30);
       insertFirst(4,1);
       insertFirst(5,40);
       insertFirst(6,56);
       
       printf("\nRestored List: ");
       printList();
       printf("\n");  
    
       struct node *foundLink = find(4);
     
       if(foundLink != NULL) {
          printf("Element found: ");
          printf("(%d,%d) ",foundLink->key,foundLink->data);
          printf("\n");  
       } else {
          printf("Element not found.");
       }
    
       delete(4);
       printf("List after deleting an item: ");
       printList();
       printf("\n");
       foundLink = find(4);
     
       if(foundLink != NULL) {
          printf("Element found: ");
          printf("(%d,%d) ",foundLink->key,foundLink->data);
          printf("\n");
       } else {
          printf("Element not found.");
       }
     
       printf("\n");
       sort();
     
       printf("List after sorting the data: ");
       printList();
     
       reverse(&head);
       printf("\nList after reversing the data: ");
       printList();
    }

    Now check out the Output of the given program:
    Original List: 
    [ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]
    Deleted value:(6,56) 
    Deleted value:(5,40) 
    Deleted value:(4,1) 
    Deleted value:(3,30) 
    Deleted value:(2,20) 
    Deleted value:(1,10) 
    List after deleting all items: 
    [ ]
    Restored List: 
    [ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]
    Element found: (4,1) 
    List after deleting an item: 
    [ (6,56) (5,40) (3,30) (2,20) (1,10) ]
    Element not found.
    List after sorting the data: 
    [ (1,10) (2,20) (3,30) (5,40) (6,56) ]
    List after reversing the data: 
    [ (6,56) (5,40) (3,30) (2,20) (1,10) ]

    In case you can face any error while compiling the code, you will check the corrections of codes. Despite that, if you see any error, then comment.

    Read Also :

    Follow Us

    to Top