No sort, but reversing a [linked list]

#include
#include

#define MAX 10    /* max of 10 elements */

struct lnode {
 int number;
 struct lnode *next;
};

/* add a lnode at the beginning of the list */
void llist_add_begin(struct lnode **n, int val);
/* reverse the whole list */
void llist_reverse(struct lnode **n);
/* display the whole linked list */
void llist_display(struct lnode *n);

int main(void) {
 struct lnode *new = NULL;
 int i = 0;

 /* insert some numbers */
 for(i = 0; i <= MAX; i++)
  llist_add_begin(&new, i);

 printf("linked list before reversal:");
 llist_display(new);
 llist_reverse(&new);
 printf("linked list after  reversal:");
 llist_display(new);

 return 0;
}

/* add a lnode at the beginning of the list */
void llist_add_begin(struct lnode **n, int val)  {
 struct lnode *temp = NULL;

 /* add new node */
 temp = malloc(sizeof(struct lnode));
 temp->number = val;
 temp->next = *n;
 *n = temp;
}

/* reverse the whole list */
void llist_reverse(struct lnode **n)  {
 struct lnode *a = NULL;
 struct lnode *b = NULL;
 struct lnode *c = NULL;
 a = *n, b = NULL;

 while(a != NULL) {
  c = b, b = a, a = a->next;
  b->next = c;
 }

 *n = b;
}

/* display the whole linked list */
void llist_display(struct lnode *n) {
 while(n != NULL)
  printf(" %d", n->number), n = n->next;

 printf("\n");
}

0 comments:

Post a Comment