/**
* @brief Linked List
* @author An
* @data 2013.5.22
**/
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include <iostream>
using namespace std;
class Node
{
public:
Node()
{
next = NULL;
}
int data;
Node *next;
};
class Link
{
public:
Node *head;
Link()
{
head = NULL;
}
~Link();
// insert a element from head
void InsertHead( int elem );
// insert a element from tail
void InsertTail( int elem );
// delete a element
void DelElem( int elem );
// reverse the linked list
void ReverseLink();
// Print list
void print();
};
#endif
/**
* @brief Linked List
* @author An
* @data 2013.5.22
**/
#include "LinkedList.h"
#include <iostream>
using namespace std;
Link::~Link()
{
while ( head != NULL )
{
Node *p = head;
head = head->next;
delete p;
cout << "delete one ..." << endl;
}
}
void Link::InsertHead( int elem )
{
Node *pElem = new Node;
pElem->data = elem;
pElem->next = head;
head = pElem;
}
void Link::InsertTail( int elem )
{
Node *pElem = new Node;
pElem->data = elem;
if ( head == NULL )
{
head = pElem;
return ;
}
Node *p = head;
while ( p->next != NULL )
{
p = p->next;
}
p->next = pElem;
}
void Link::DelElem( int elem )
{
Node *p = head;
if ( head == NULL )
{
cout << "The link is empty!" << endl;
return ;
}
if ( head->data == elem )
{
head = head->next;
delete p;
return ;
}
while ( p->next != NULL && p->next->data != elem )
{
p = p->next;
}
if ( p->next == NULL )
{
cout << "This element does not exist!" << endl;
}
else
{
Node *tmp = p->next;
p->next = p->next->next;
delete tmp;
}
}
void Link::ReverseLink()
{
if ( head == NULL )
{
cout << "The link is empty!" << endl;
return ;
}
Node *tmp = head;
Node *p = head;
Node *q = head->next;
while ( q != NULL )
{
p = head;
head = q;
q = q->next;
head->next = p;
}
tmp->next = NULL;
}
void Link::print()
{
Node *p = head;
while ( p != NULL )
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
#include "LinkedList.h"
#include <iostream>
using namespace std;
int main()
{
Link linkedlist;
for ( int i = 0; i < 10; ++i )
{
linkedlist.InsertTail( i );
}
linkedlist.print();
linkedlist.ReverseLink();
linkedlist.print();
linkedlist.DelElem( 5 );
linkedlist.print();
return 0;
}