Skip to content

Instantly share code, notes, and snippets.

@satishgoda
Last active January 1, 2016 12:39
Show Gist options
  • Save satishgoda/8146278 to your computer and use it in GitHub Desktop.
Save satishgoda/8146278 to your computer and use it in GitHub Desktop.
Linear Linked Lists
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int info;
struct Node *link;
} Node;
Node * INSERT(int X, Node *FIRST)
{
Node *NEW = calloc(1, sizeof(Node));
NEW->link = FIRST;
NEW->info = X;
printf("Created %p Node(%d, %p)", NEW, NEW->info, NEW->link);
if (FIRST != NULL){
printf(" before %p Node(%d, %p)", FIRST, FIRST->info, FIRST->link);
}
printf("\n");
return NEW;
}
/*
Insert a node at the end of the list
*/
Node * INSEND(int X, Node *FIRST)
{
Node *NEW = calloc(1, sizeof(Node));
NEW->info = X;
NEW->link = NULL;
printf("Created %p Node(%d, %p)", NEW, NEW->info, NEW->link);
if(FIRST == NULL) {
printf("\n");
return NEW;
}
Node *walker = FIRST;
while(walker->link != NULL) {
walker = walker->link;
}
walker->link = NEW;
printf(" after %p Node(%d, %p) \n", walker, walker->info, walker->link);
return FIRST;
}
/* Inserts node with info X in increasing order */
Node * INSORD(int X, Node *FIRST)
{
Node *NEW = calloc(1, sizeof(Node));
NEW->info = X;
NEW->link = NULL;
if (FIRST == NULL) {
return NEW;
}
if (NEW->info <= FIRST->info) {
NEW->link = FIRST;
return NEW;
}
Node *walker = FIRST;
while (walker->link != NULL && walker->link->info <= NEW->info) {
walker = walker->link;
}
NEW->link = walker->link;
walker->link = NEW;
return FIRST;
}
void REMOVEALL(Node *FIRST)
{
Node *walker = FIRST;
while(walker != NULL) {
Node *node = walker;
walker = walker->link;
printf("Freeing %p Node(%d, %p)\n", node, node->info, node->link);
free(node);
}
}
void PRINT(Node *FIRST)
{
Node *walker = FIRST;
while(walker != NULL) {
printf("%p Node(%d, %p)", walker, walker->info, walker->link);
walker = walker->link;
if (walker != NULL) {
printf(" -> ");
}
}
printf("\n");
}
int main()
{
Node *integers = NULL;
/*
integers = INSERT(20, integers);
integers = INSERT(10, integers);
integers = INSEND(30, integers);
integers = INSEND(40, integers);
*/
integers = INSORD(30, integers);
integers = INSORD(70, integers);
integers = INSORD(-10, integers);
integers = INSORD(70, integers);
printf("\n");
PRINT(integers);
printf("\n");
REMOVEALL(integers);
integers = NULL;
printf("\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment