标签:eof 就会 type else 从表 head get 关键点 总结
刚刚学习完链表,总结了三种链表的创建方式,从表前插入节点,从表后插入节点和它的进化版??
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *next;
}linkList;
//下面??的是从前面插入,但是缺点比较明显,因为链表的顺序和你输入的顺序是相反的。。。推荐使用后面的
linkList *CreatList_1()
{
char ch;
linkList *head = NULL,*s = NULL;
ch = getchar();
while(ch!=‘$‘)
{
s = (linkList *)malloc(sizeof(linkList));
s->data = ch;
s->next = head;
head = s;
char a = getchar();
ch = getchar();
}
return head;
}
//这是从后面插入的初级形式
linkList *CreatList_2()
{
char ch;
linkList *head,*s,*r = NULL;
head = NULL;
s = NULL;
ch = getchar();
while(ch!=‘$‘)
{
s = (linkList *)malloc(sizeof(linkList));
s->data = ch;
if(head==NULL)head = s;
else r->next = s;
r = s;
char a = getchar();
ch = getchar();
}
if(r!=NULL)r->next = NULL;
return head;
}
当当当当,下面是高级形式,头节点是一个不含数据的空节点,从第二个节点开始储存数据,这样刚好对应1,2,3。。。的顺序,并且少了if(r!=NULL)的判断语句。
linkList *CreatList_3()
{
char ch;
linkList *head, *s, *r;
head = (linkList *)malloc(sizeof(linkList));
r = head;
ch = getchar();
while(ch!=‘$‘)
{
s = (linkList *)malloc(sizeof(linkList));
s->data = ch;
r->next = s;
r = s;
char a = getchar();
ch = getchar();
}
r->next = NULL;
return head;
}
linkList *GET(linkList *head,int i)
{
int j = 0;
linkList *p;
p = head;
while((p->next!=NULL)&&(j<i))
{
p = p->next;
j++;
}
if(i == j)return p;
else return NULL;
}
最后要注意的一个关键点,在创建循环的每一个ch = getchar()前要加一句 char a = getchar(),用来吸收输入数据时隔开每一个数据的空格
不然就会出现每两个有用的节点间出现空节点的现象。
标签:eof 就会 type else 从表 head get 关键点 总结
原文地址:https://www.cnblogs.com/farytormenta/p/11569199.html