一个链表有关问题,望精通数据结构的达人来帮忙

一个链表问题,望精通数据结构的达人来帮忙!
我想写一个可以任意删除的链表,链表结构为下:
typedef   struct   _LIST
{
int8   Flag;    
int8   Content[40];
struct   _LIST*   pNext;
}LIST;  

LIST*   g_MOList   =   NULL;
LIST*   g_MOTemp   =   NULL;
LIST*   g_MOTemp1   =   NULL;
 
void   ShanChu(void)
{
LIST*   pNode   =   NULL;

    pNode   =   g_MOTemp   =   g_MOTemp1   =   g_MOList;
        while(pNode   !=   NULL)
        {
            if   (pNode-> Flag==   1)
            {
                if(pNode   ==   g_MOList)
                {
                    if(g_MOList-> pNext   !=   NULL)
                        g_MOList   =   pNode-> pNext;
                    else
                        g_MOListTail   =   g_MOList   =   NULL;    
                }
                else
                {
                    if(pNode-> pNext   !=   NULL)
                    {
                        g_MOTemp1   =   pNode-> pNext;
                    }
                    else
                    {
                        g_MOListTail   =   g_MOTemp1;
              g_MOTemp1-> pNext   =   NULL;
                    }

                }
          }
        else
        {
                g_MOTemp1   =   pNode;
                g_MOTemp=   g_MOTemp1;
                g_MOTemp=   g_MOTemp-> pNext;
        }

            pNode   =   pNode-> pNext;
 
  }
        g_MOTemp   =   g_MOList;
        return   0;
  }
}

比如有一个链表括号里面表示该结点的Flag值
1(1),2(1),3(0),4(1),5(1)
删除结点的时候,第一个结点和第二个结点1和2都能够删除,但是
3,4,5结点就不能删除,不知道是哪里出了错误,还望朋友帮忙指出,谢谢!


------解决方案--------------------
能否解释一下这段落
else
{
g_MOTemp1 = pNode;
g_MOTemp= g_MOTemp1;
g_MOTemp= g_MOTemp-> pNext;