struct node
{
int value ;
node* next ;
};
struct list
{
node *head ;
node *tail ;
};
void initialize_list( list &a)
{
[Link] = NULL;
[Link] = NULL;
}
node* CreateNode( int x)
{
node* p ;
p = new node;
p->value = x;
p->next = NULL;
return p;
}
void add_front( list &a, int b)
{
node* C;
C = CreateNode(b);
if ( [Link] == NULL )
{
[Link] = C ;
[Link] = C ;
}
else
{
C->next = [Link] ;
[Link] = C ;
}
}
void add_back( list &a, int b)
{
node* C;
C = CreateNode(b);
if ( [Link] == nullptr)
{
[Link] = C ;
[Link] = C ;
}
else
{
[Link]->next = C ;
C->next = NULL;
[Link] = C ;
}
}
void Add_after( list &a , node* p, node* q)
{
if( q == [Link] )
{
[Link]->next = p;
[Link] = p;
}
else
{
p->next = q->next;
q->next = p;
}
}
void delete_head ( list &l )
{
if ( [Link] == NULL )
{
return ;
}
else if ( [Link] == [Link] )
{
delete [Link] ;
[Link] = [Link] = NULL ;
}
else
{
auto p = [Link] ;
[Link] = [Link]->next ;
delete p ;
}
}
void delete_after_p ( list &l , node* p )
{
if ( p->next == [Link] ) // Node muố n xóa nằ m đằ ng sau node p và nó là node cuối cùng của
danh sách
{
delete [Link] ;
[Link] = p ;
[Link]->next = NULL ;
}
else
{
auto q = p->next ; // q là node muốn xóa
p->next = q->next ;
delete q ;
}
}