c语言数据结构单链表(头插入法)

Python015

c语言数据结构单链表(头插入法),第1张

head=(LNode

*)malloc(sizeof(LNode))

这一句不要,没啥用处,除非你head指向的节点也就是第一个节点的data不需要数据

head->next=NULL这里修改为head=NULL

让head先指向NULL,也就是没有节点

其实这个可以不要,再主函数中,先让链表是空链表即可(即让head=NULL)

head->data=data

head->next=p->next

head->next=p

关键在这里

你仔细考虑一下,一般来说头插法的head只是一个指针,不要对head指向的那个节点操作,对p操作完成后,让head指过去即可

所以修改为

p->data=data

//赋值过去,因为你现在申请了p的内存空间

p->next=head

//把head指向的那个节点连接到p的后面,这样完成头插

//

这是head没有用了,p成为链表的头指针

head=p

//head再指向这个链表的头部,也就是p指向的节点,为下一次循环做准备

head=Createlist(head)//链表初始化

主函数中这样不太好,建议不要重名

C语言创建单链表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

int  data

node * next

}node , * List

void create(int n)

{

int c

List s,L

L=(List)malloc(sizeof(node))

L->next=NULL

printf("请输入第1个数据:")

scanf("%d",&c)

L->data=c

for(int i=2i<=ni++)

{

s=(List)malloc(sizeof(node))

printf("请输入第%d个数据:",i)

scanf("%d",&c)

s->data=c

s->next=L

L->next =s

}

printf("链表创建成功!")

}

void main()

{

int n

printf("请你输入链表的个数:")

scanf("%d",&n)

create(n)

}

单链表创建方法:

单链表的建立有头插法、尾插法两种方法。

1. 头插法

单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。

由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请 存储空间可使用malloc()函数实现,需设立一申请单元 指针,但malloc()函数得到的指针并不是指向 结构体的指针,需使用 强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head 指针为NULL。

链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。

2. 尾插法

若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是 头结点。