Struct Node
Struct Node
{
int value ;
node* next ;
};
struct list
{
node *head ;
node *tail ;
};
void initialize_list( list &a)
{
a.head = NULL;
a.tail = 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 ( a.head == NULL )
{
a.head = C ;
a.tail = C ;
}
else
{
C->next = a.head ;
a.head = C ;
}
}
void add_back( list &a, int b)
{
node* C;
C = CreateNode(b);
if ( a.head == nullptr)
{
a.head = C ;
a.tail = C ;
}
else
{
a.tail->next = C ;
C->next = NULL;
a.tail = C ;
}
}
void Add_after( list &a , node* p, node* q)
{
if( q == a.tail )
{
a.tail->next = p;
a.tail = p;
}
else
{
p->next = q->next;
q->next = p;
}
}
void delete_head ( list &l )
{
if ( l.head == NULL )
{
return ;
}
else if ( l.head == l.tail )
{
delete l.head ;
l.head = l.tail = NULL ;
}
else
{
auto p = l.head ;
l.head = l.head->next ;
delete p ;
}
}
void delete_after_p ( list &l , node* p )
{
if ( p->next == l.tail ) // 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 l.tail ;
l.tail = p ;
l.tail->next = NULL ;
}
else
{
auto q = p->next ; // q là node muốn xóa
p->next = q->next ;
delete q ;
}
}