比较学号大小建立双向链表

typedef struct xueshengzheng
{

char xuehao[20];

 struct xueshengzheng *Next;

struct xueshengzheng *Last;

}*hData,Data;

struct xueshengzheng *head;

head=(hData)malloc(sizeof(struct xueshengzheng));

    head->Next=NULL;

while(1)

 {
 hData p2=NULL,p1;
 p1=&head;
 p2=(hData)malloc(sizeof(struct xueshengzheng)); //录入信息的结点
 scanf("%s",p2->xuehao);
if(strcmp(p2->xuehao,"00000000")==0)
break;
 p2->Next=NULL;
  if(head->Next==NULL)  //头节点的连接
  {
     head->Next=p2;  
     p2->Last=head;
  }
  else
  {
    while((p1->Next!=NULL)&&(strcmp(p2->xuehao,p1->Next->xuehao)>0)) //判定结点连接位置
    {
         p1=p1->Next;
    }
    if((strcmp(p2->xuehao,p1->xuehao)<0)&&(p1->Next!=NULL))//如果链表出现比新结点小的学号则将新结点连接
    {
    p2->Next=p1->Next;
    p1->Next->Last=p2;
    p1->Next=p2;
    p2->Last=p1;
    printf("u");
    }
    if(p1->Next==NULL)  //如果链表到达末尾,则直接连接结点
    {
     p1->Next=p2;
     p2->Last=p1;

    }
   }
}

各位大佬,可以看看我这个根据学号建立的双向链表有什么问题吗。。。改了一天了,还是没改出来,真的大脑有点乱,请各位大佬高抬贵手了~~~谢谢大佬们。

刚才有点问题,没考虑最后一个添加,已经修改,请看看:

#include <stdio.h>
#include <stdlib.h>

typedef struct xueshengzheng
{
    char xuehao[32];
    struct xueshengzheng  *Last;
    struct xueshengzheng  *Next;
}*hData;

hData head;

void main()
{
    head = (hData)malloc(sizeof(struct xueshengzheng));

    head->Next = NULL;
    while (1)
    {
        hData p2 = NULL, p1;
        p1 = head;
        p2 = (hData)malloc(sizeof(struct xueshengzheng));
        scanf("%s", p2->xuehao);
        if (strcmp(p2->xuehao, "00000000") == 0)
            break;

        p2->Next = NULL;
        if (head->Next == NULL)
        {
            head->Next = p2;
            p2->Last = head;
            printf("插入第一个节点\n");
        }
        else
        {
            while ((p1->Next != NULL) && (strcmp(p2->xuehao, p1->Next->xuehao) > 0))
            {
                p1 = p1->Next;
            }
            if (p1->Next != NULL)
            {
                if ((strcmp(p2->xuehao, p1->Next->xuehao) < 0))
                {
                    p2->Next = p1->Next;
                    p1->Next->Last = p2;
                    p1->Next = p2;
                    p2->Last = p1;
                    printf("插入节点\n");
                }
            }
            else
            {
                p1->Next = p2;
                p2->Last = p1;

            }
        }
    }
    system("pause");
}