创建链表可以采用前插法或后插法。
前插法是将新生成的结点依次插入头结点之后创建链表。参看如下图示
链表初始化时,先生成头结点,将头结点地址赋值给头指针L。
(1)生成数据域值为的结点,将此结点挂在头节点之后
(2)生成数据域值为的结点,此时采用前插法,将结点插入到头结点之后,结点之前。
(3)由此,之后生成的每个结点,都插入到头结点之后。
根据上述的方法,使用C语言实现
结构体变量表示结点。具体代码解释参考:数据结构-单链表实现-结点表示
创建链表的过程如下:
(1)链表初始化,生成头结点,将头结点的地址赋值给头指针。
L=(LinkList)malloc(sizeof(LNode));
使用malloc函数动态分配内存,malloc函数返回的是void空指针,使用强制类型转换,转换为LinkList类型,将地址赋值给L。
再将头结点的指针域赋值为空
L-next=NULL;
图示表示如下:
上述代码的操作后L获得的地址是头结点的地址,符号(^)表示NULL。
(1)链表生成结点时反复执行的操作,所以需要使用循环。在循环中反复生成新的结点。所以在循环中同样使用malloc()函数生成结点
p=(LinkList)malloc(sizeof(LNode));
声明一个新的变量p,类型时LinkList类型。变量p存储的是新生成结点的地址。
(2)新生成结点后,需要向数据域中添加值,此时可以使用scanf()函数
scanf("%d",p-data);
(4)最后的问题,如何将新生成的结点连接到头结点之后?先看如下面的图示
L是头指针,存储头结点的地址;p指向新结点,存储新生成结点的地址。
此时需要将新结点挂在头结点之后,那需要先将头结点的指针域的值赋给新结点的指针域,再将头结点的指针域指向新结点。
p-next=L-next;L-next=p;
以下是完整代码参考