Linked List Program in C - JohnHau/mis GitHub Wiki

A linked list is a sequence of data structures, which are connected together via links. Linked List is a sequence of links which contains items. Each link contains a connection to another link. Linked list is the second most-used data structure after array.

Implementation in C Live Demo #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h>

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(); } If we compile and run the above program, it will produce the following result −

Output 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) ]

⚠️ **GitHub.com Fallback** ⚠️