链表的三种创建形式
Posted farytormenta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的三种创建形式相关的知识,希望对你有一定的参考价值。
刚刚学习完链表,总结了三种链表的创建方式,从表前插入节点,从表后插入节点和它的进化版??
#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(),用来吸收输入数据时隔开每一个数据的空格
不然就会出现每两个有用的节点间出现空节点的现象。
以上是关于链表的三种创建形式的主要内容,如果未能解决你的问题,请参考以下文章