Example Program To Reverse Singly Linked List:
Simple Logic
struct node{
#include<stdio.h>
#include<stdlib.h>
struct sllNode {
int data;
struct sllNode *nextPtr;
};
struct sllNode *front = NULL;
struct sllNode *rear = NULL;
/*
* creates Node and fill the given data
*/
struct sllNode * createNode(int data) {
struct sllNode *ptr = (struct sllNode *) malloc(sizeof (struct sllNode));
ptr->data = data;
ptr->nextPtr = NULL;
return ptr;
}
/* inserting node at the end of the list */
void insertionOp(int data) {
struct sllNode *ptr = createNode(data);
if (rear == NULL) {
front = ptr;
rear = ptr;
}
rear->nextPtr = ptr;
rear = ptr;
}
Simple Logic
struct node{
int data;
int next;
}
int Reverselist(int *n)
{
struct node *t,temp=NULL;
while(t!=NULL)
{
t=head->next;
head->next=temp;
temp=head;
head->next=t;
}
return temp; //reversed list is returned
}
#include<stdio.h>
#include<stdlib.h>
struct sllNode {
int data;
struct sllNode *nextPtr;
};
struct sllNode *front = NULL;
struct sllNode *rear = NULL;
/*
* creates Node and fill the given data
*/
struct sllNode * createNode(int data) {
struct sllNode *ptr = (struct sllNode *) malloc(sizeof (struct sllNode));
ptr->data = data;
ptr->nextPtr = NULL;
return ptr;
}
/* inserting node at the end of the list */
void insertionOp(int data) {
struct sllNode *ptr = createNode(data);
if (rear == NULL) {
front = ptr;
rear = ptr;
}
rear->nextPtr = ptr;
rear = ptr;
}
/* delete all nodes in the list */
void deleteList() {
struct sllNode *ptr;
ptr = front;
while (ptr){
front = ptr->nextPtr;
free(ptr);
ptr = front;
}
}
/* traverse the list and print the data in each node */
int walkList() {
struct sllNode *ptr;
int i = 0;
ptr = front;
while (ptr) {
printf("%d ", ptr->data);
ptr = ptr->nextPtr;
i++;
}
return (i);
}
/* reverse the linked list */
void reverseList() {
struct sllNode *xPtr, *yPtr, *zPtr;
yPtr = zPtr = NULL;
xPtr = front;
while (xPtr) {
zPtr = yPtr;
yPtr = xPtr;
xPtr = xPtr->nextPtr;
yPtr->nextPtr = zPtr;
}
front = yPtr;
return;
}
int main (int argc, char *argv[]) {
int data, i, n;
FILE *fp;
fp = fopen(argv[1], "r");
if (!fp) {
printf("Unable to open the file\n");
exit(0);
}
/* scan the inputs from the file & insert it into the list */
while (fscanf(fp, "%d", &data) != EOF) {
insertionOp(data);
}
printf("\nData in Linked List:\n");
n = walkList();
printf("\nNo of elements in linked list: %d\n", n);
printf("\nData in Reversed Linked List:\n");
reverseList();
n = walkList();
printf("\nNo of elements in linked list: %d\n\n", n);
deleteList();
return 0;
}
Output: (C Program To Reverse Singly Linked List)
6 5
7 4
8 2
Data in Linked List:
6 5 7 4 8 2
No of elements in linked list: 6
Data in Reversed Linked List:
2 8 4 7 5 6
No of elements in linked list: 6
7 4
8 2
Data in Linked List:
6 5 7 4 8 2
No of elements in linked list: 6
Data in Reversed Linked List:
2 8 4 7 5 6
No of elements in linked list: 6
No comments:
Post a Comment