1.head如何来定义的,tail如何来定义的。
head->node1->node2..........
head可以看成等于第一个node0->next;node1->next就是保存下一个的节点node的首地址的指针。
单链表只能从0往N进行遍历。
第一是定义一个结构体指针,然后用NULL来初始化这个指针防止其成为悬挂指针,把第一个节点的首地址赋给这个head.
最后一个结构体的nodeN->next 用NULL来初始化这个指针防止其成为悬挂指针。
遍历的算法 p(N)=P(N-1)->next;
插入节点:
//需要在stud->num相同这个对象后面加一个对象
struct student *insert(struct student *head,struct student *stud)
{
struct *temp;
temp=(struct student *)malloc(sizeof(struct student));
if(temp==NULL){printf("Out of memory!");exit(0);}
if(head==NULL) //判断是否是空链表
{
temp=stud; //node0
temp->next=NULL;}
else //不是空链表,进行遍历查找
{ temp=head;
while((stud->num!=temp->num)&&(temp->next!=NULL)){temp=temp->next;}//寻找链表 //一直利用temp来循环查找stud
if(temp->next==NULL) {temp->next=stud;stud->next=NULL; } //找不到stud,那么就在后面
if(stud->num==temp->num){stud->next=temp->next;temp->next=stud; } //找到就插入新的,这句语句是否正确????
}
n=n+1;//node的个数
return (head)
}
三个要点
1.空链表
2.没有找到需要的节点
3.找到插入.