单链表插入程序,有些疑问,求教
typedef struct student{
int data;
struct student* next;
}node;
/*单链表插入节点:1.如果插入在头结点之前 2.如果插入为中间节点 3.如果插入为尾节点*/
node* insertNode(node* head,int data){
node *p0,*p1,*p2; //p0为要插入的节点
p1 = head;
p0 = (node*)malloc(sizeof(node));
p0->data = data;
while(p1->next != NULL){
p2 = p1; //疑问在这2行,是想p2保存p1之前的节点,p1指向下一个节点
p1 = p1->next; //但是这样写好像head被跳过了?该怎么写,求教
if(p0->data <= p1->data){
if(p1 == head){ //插入在头节点之前
p0->next = p1;
head = p0;
}else{ //插入中间节点
p2->next = p0;
p0->next = p1;
}
}else{ //插入在尾节点之后
p1->next = p0;
p0->next = NULL;
}
}
return head;
}
[解决办法]