头插法:
我犯的错误主要有:
scanf函数里面加了换行符“\n”
struct Test* insertFromHead(struct Test *head)
{
struct Test *new;
while(1){
new = (struct Test *)malloc(sizeof(struct Test));
printf("input your data\n");
scanf("%d",&(new->data));
if(new->data == 0){
return head;
}
if(head == NULL){
head = new;
}else{
new->next = head;
head = new;
}
} return head;
}
头插法分步:
struct Test* insertFromHead(struct Test *head,struct Test *new) //把新节点头插法在原链表中
{
if(head == NULL){
head = new;
}else{
new->next = head;
head = new;
}
return head;
}
struct Test* creatLink(struct Test *head) //不断创造新的节点
{
struct Test *new;
while(1){
new = (struct Test *)malloc(sizeof(struct Test));
printf("input your data\n");
scanf("%d",&(new->data));
if(new->data == 0){ //如果插入的节点为0,停止继续输入,并返回头结点
return head;
} head = insertFromHead(head,new);//若不为0,则插入
}
return head;
}
尾插法:
和头插法类似
struct Test* insertFromBehind(struct Test *head,struct Test *new)
{
struct Test *p = head;
if(head == NULL){
head = new;
return head;
}
while(p->next != NULL){
p = p->next;
}
p->next = new;
return head;
}
struct Test* creatLink2(struct Test *head)
{
struct Test *new;
while(1){
new = (struct Test *)malloc(sizeof(struct Test));
printf("input your data\n");
scanf("%d",&(new->data));
if(new->data == 0){
return head;
} head = insertFromBehind(head,new);
}
return head;
}
文章内若有错误,敬请指出,互相交流,共同进步!