C语言 用指针类型编写插入排序疑问???

直接上相关代码:

struct process
{
    int id;
    int arrive_t;//到达时间
    int servre_t;//服务时间
    int start_t;//服务开始时间
};

struct team
{
    process *pc;
    team *next;
    team *pre;
};
void sortp()
{ 
    team *p,*px;
    int a[20];
    int i=0;
  //plink为链表头结点
    for(p=plink->next->next;p;p=p->next)//按照到达时间排序(插入排序)
    {
        int key = p->pc->arrive_t;
        team *py=p->next;
        a[i]=p->pc->id;
        //a[i]数组用来查看链表执行序列
        //砍掉要比较的那个节点
        if(!p->next)//避免最后一个节点指针出错
        {
            p->pre->next=NULL;
            p->pre=NULL;
        }
        else
        {

            p->next->pre=p->pre;
            p->pre->next=p->next;
            px=p->pre;
            py=p;
            p->pre=NULL;
            p->next=NULL;

        }
        for(px;px->pre;px=px->pre)//插入排序
        {
            if(px->pc->arrive_t<key) break; 
        }

        p->pre=px;
        px->next->pre=p;
        p->next=px->next;
        px->next=p; 

        p=py;
        py=NULL;
        //if(!p->next) break;
        i++;
    }
}

当有两个p->pc->arrive-t 相等并且相邻输入时,链表会在两者之间无限循环