#include "LinkedList.h"
int main(void){
int i=0;
int Count=0;
Node* List=NULL;
Node* Current=NULL;
Node* NewNode=NULL;
for(i=0; i<5; i++){
NewNode=SLL_CreateNode(i);
SLL_AppendNode(&List, NewNode);
}
NewNode=SLL_CreateNode(-1);
SLL_InsertNewHead(%List, NewNode);
NewNode=SLL_CreateNode(-2);
SLL_InsertNewHead(%List, NewNode);
Count=SLL_GetNodeCount(List);
for(i=0; i<Count; i++){
Current=SLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
printf("\nInserting 3000 After [2]...\n\n");
Current=SLL_GetNodeAt(List, 2);
NewNode=SLL_CreateNode(3000);
SLL_InsertAfter(Current, NewNode);
Count=SLL_GetNodeCount(List);
for(i=0; i<Count; i++){
Current=SLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
printf("\nDestroying List...\n");
for(i=0; i<Count; i++){
Current=SLL_GetNodeAt(List, 0);
if(Current!=NULL){
SLL_RemoveNode(&List, Current);
SLL_DestroyNode(Current);
}
}
return 0;
}
#include "LinkedList.h"
Node* SLL_CreateNode(ElementType NewData){
Node* NewNode=(Node*)malloc(sizeof(Node));
NewNode->DAta=NewData;
NewNode->NextNode=NULL;
return NewNode;
}
void SLL_DestroyNode(Node* Node){
free(Node);
}
void SLL_AppendNode(Node** Head, Node* NewNode){
if((*Head)==NULL){
*Head=NewNode;
}
else{
Node* Tail=(*Head);
while(Tail->NextNode!=NULL){
Tail=Tail->NextNode;
}
Tail->NextNode=NewNode;
}
}
void SLL_InsertAfter(Node* Current, Node* NewNode){
NewNode->NextNode=Current->NextNode;
Current->NextNode=NewNode;
}
void SLL_InsertNewHead(Node** Head, Node* NewHead){
if(Head==NULL){
(*Head)=NewHead;
}
else{
NewHead->NextNode=(*Head);
(*Head)=NewHead;
}
}
void SLL_RemoveNode(Node** Head, Node* Remove){
if(*Head==Remove){
*Head=Remove->NextNode;
}
else{
Node* Current=*Head;
while(*Current!=NULL&&Current->NextNode!=Remove){
Current=Current->NextNode;
}
if(Current!=NULL){
Current->NextNode=Remove->NextNode;
}
}
}
Node* SLL_GetNodeAt(Node* Head, int Location){
Node* Current=Head;
while(Current!=NULL&&(--Location)>=0){
Current=Current->NextNode;
}
return Current;
}
int SLL_GetNodeCount(Node* Head){
int Count=0;
Node* Current=Head;
while(Current!=NULL){
Current=Current->NextNode;
Count++;
}
return Count;
}
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct tagNode{
ElementType Data;
struct tagNode* NextNode;
}Node;
Node* SLL_CreateNode(ElementType NewData);
void SLL_Destroy(Node* Node);
void SLL_AppendNode(Node** Head, Node* NewNode);
void SLL_InsertAfter(Node* Current, Node* NewNode);
void SLL_InsertNewHead(Node** Head, Node* NewHead);
void SLL_RemoveNode(Node** Head, Node* Remove);
Node* SLL_GetNodeAt(Node* Head, int Location);
int SLL_GetNodeCount(Node* Head);
#endif