C++,
pasted
on Oct 16:
|
#include <stdio.h>
#include <stdlib.h>
struct Node
{
char CharContent;
struct Node * NextNodePointer;
};
typedef struct Node Node;
Node * CreateNewNode(char ch);
Node * AddNode(Node * start, Node * newNode);
void DeleteTailNode(Node ** start);
void PrintAllNodes(Node * start);
int main()
{
Node * start = NULL;
Node * newNode = NULL;
start = AddNode(start, CreateNewNode('A'));
start = AddNode(start, CreateNewNode('B'));
start = AddNode(start, CreateNewNode('C'));
start = AddNode(start, CreateNewNode('D'));
PrintAllNodes(start);
DeleteTailNode(&start);
PrintAllNodes(start);
DeleteTailNode(&start);
PrintAllNodes(start);
DeleteTailNode(&start);
PrintAllNodes(start);
DeleteTailNode(&start);
PrintAllNodes(start);
}
Node * CreateNewNode(char ch)
{
struct Node * newNode = (struct Node *) malloc(sizeof(struct Node));
newNode->CharContent = ch;
newNode->NextNodePointer = NULL;
return newNode;
}
Node * AddNode(Node * start, Node * newNode)
{
Node * copyOfStart = start;
if(start == NULL)
{
return newNode;
}
else
{
while(copyOfStart->NextNodePointer != NULL)
{
copyOfStart = copyOfStart->NextNodePointer;
}
copyOfStart->NextNodePointer = newNode;
return start;
}
}
void DeleteTailNode(Node **start)
{
Node * prev = NULL;
Node * current = *start;
while(current!=NULL && current->NextNodePointer != NULL)
{
prev = current;
current = current->NextNodePointer;
}
free (current);
if (prev != NULL)
{
prev->NextNodePointer = NULL;
}
if (prev == NULL && *start!= NULL)
*start = NULL;
}
void PrintAllNodes(Node * start)
{
struct Node * tempRoot = start;
while(tempRoot != NULL)
{
printf("%c, ", tempRoot->CharContent);
tempRoot = tempRoot->NextNodePointer;
}
printf("\n");
}
|
Output:
|
A, B, C, D,
A, B, C,
A, B,
A,
|
|