C语言链表新手 求大佬解决 链表不循环而且也不出去

void sort(struct people *head)
{
struct people *p1,*p2,*p3;

for( p1=head, p2=p1->next;p2!=NULL;p1=p1->next,p2=p2->next)
    if(strcmp((p1->name),(p1->next->name))>0)
    {
        p3=p1;
        p1=p2;
        p2=p3;
        printf("%s",p1->name);
        printf("%s",p2->name);
    }

}