C Tutorial
Linked list are not stored in adjacent locations and array occupy continuous locations.
Printing nodes from tail to head pointer.
#include<stdio.h> //structure contains data and link struct node { int data; struct node *link; }; void append(struct node **head, int data) { struct node *temp, *tail; temp = *head; // if linked list is empty, adding as first node. if(*head == NULL) { temp = malloc( sizeof (struct node)); temp->data = data; temp->link = NULL; *head = temp; } // adding in the last if linked list is not empty else { //Move to last node while(temp->link != NULL) { temp = temp->link; } tail = malloc( sizeof (struct node)); tail->data = data; tail->link = NULL; temp->link = tail; } } // displays the linked list from head to tail nodes void display(struct node *head) { printf("\n"); // traversing entire linked list printf("\nhead==>"); while(head != NULL) { printf("%d-->", head->data); head = head->link; } printf("tail"); } // finds the number of nodes added in the linked list. int count(struct node *head) { int c = 0; while(head != NULL) { head = head->link; c++; } return c; } // deletes the linked list elements int delete(struct node **head, int data) { struct node *old, *temp; temp = *head; while(temp != NULL) { if(temp->data == data) { // deleting first node if data matches if(temp == *head) { *head = temp->link; free(temp); return 1; } // deleting other nodes except first node else { old->link = temp->link; free(temp); return 1; } } // old points to the previous node old = temp; temp = temp->link; } return 0; } // reverses the linked list from tail to head nodes void reverse(struct node **head) { struct node *temp1, *temp2, *temp3; temp1 = *head; temp2 = NULL; while(temp1!=NULL) { temp3 = temp2; temp2 = temp1; temp1 = temp1->link; temp2->link = temp3; } *head = temp2; } void main() { int op, data, loc; struct node *ptr; // Empty linked list ptr = NULL; printf("\nNumber of elements in the linked list: %d", count(ptr)); append(&ptr, 1); append(&ptr, 2); append(&ptr, 3); display(ptr); printf("\nNumber of elements in the linked list: %d", count(ptr)); do { printf("\nLinked List\n---------------\n1.Add element in end\n2.reverse\n3.delete\n4.display\n5.count\n0.exit"); printf("\nEnter choice: "); scanf("%d", &op); switch(op) { case 1: printf("\nEnter element: "); scanf("%d", &data); append(&ptr, data); break; case 2: printf("\nReverse linked list: "); reverse(&ptr); break; case 3: printf("\nEnter element: "); scanf("%d", &data); delete(&ptr, data); break; case 4: display(ptr); break; case 5: printf("\nNumber of elements in the linked list: %d", count(ptr)); break; } }while(op>=1 && op<=4); }Compilation:
$ cc reverse-linked-list.c reverse-linked-list.c: In function ‘append’: reverse-linked-list.c:18:16: warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration] temp = malloc( sizeof (struct node)); ^~~~~~ reverse-linked-list.c:18:16: warning: incompatible implicit declaration of built-in function ‘malloc’ reverse-linked-list.c:18:16: note: include ‘Output:’ or provide a declaration of ‘malloc’ reverse-linked-list.c:31:16: warning: incompatible implicit declaration of built-in function ‘malloc’ tail = malloc( sizeof (struct node)); ^~~~~~ reverse-linked-list.c:31:16: note: include ‘ ’ or provide a declaration of ‘malloc’ reverse-linked-list.c: In function ‘delete’: reverse-linked-list.c:76:17: warning: implicit declaration of function ‘free’ [-Wimplicit-function-declaration] free(temp); ^~~~ reverse-linked-list.c:76:17: warning: incompatible implicit declaration of built-in function ‘free’ reverse-linked-list.c:76:17: note: include ‘ ’ or provide a declaration of ‘free’ reverse-linked-list.c:83:17: warning: incompatible implicit declaration of built-in function ‘free’ free(temp); ^~~~ reverse-linked-list.c:83:17: note: include ‘ ’ or provide a declaration of ‘free’
$ ./a.out Number of elements in the linked list: 0 head==>1-->2-->3-->tail Number of elements in the linked list: 3 Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 1 Enter element: 4 Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 4 head==>1-->2-->3-->4-->tail Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 2 Reverse linked list Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 4 head==>4-->3-->2-->1-->tail Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 5 Number of elements in the linked list: 4 Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 2 Reverse linked list Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 4 head==>1-->2-->3-->4-->tail Linked List --------------- 1.Add element in end 2.reverse 3.delete 4.display 5.count 0.exit Enter choice: 0
C Tutorial
Privacy Policy | Copyright2020 - All Rights Reserved. | Contact us
| Report website issues in Github
| Facebook page
| Google+ page