帅弟带你学c:单链表创建的两种方式
c创建单链表的两种方式和打印
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node //单链表结构体
{
int data;
node* next;
}NOde,*Node;
node* init_node(Node l) //初始化头节点
{
node* firstcreate;
firstcreate = (node*)malloc(sizeof(node));
if (NULL==firstcreate) //null==左值比左值==右值更安全,因为你有可能把==打成=
{
perror("");
exit(EXIT_FAILURE);
}
firstcreate->next = NULL;
l = firstcreate;
return l;
}
node* create_linklist_head(node * LINK, int n) //头插法
{
Node p = NULL;
for (int i = 0; i < n; i++)
{
p = (node*)malloc(sizeof(Node));
if (NULL == p) //null==左值比左值==右值更安全,因为你有可能把==打成=
{
perror("");
exit(EXIT_FAILURE);
}
scanf_s("%d", &p->data);
p->next = LINK->next; //这两句是关键,节点LINK作为头结点,头结点内
LINK->next = p; //没有值。
}
return LINK;
}
node* create_linklist_tail(node* link) //尾插法
{
int m;
node* node_tail ;
node* node_tail1 ;
link = (node*)malloc(sizeof(Node));
node_tail1 = link;
node_tail1->next = NULL;
scanf_s("%d", &m); //节点的值
while (m<99999)
{
node_tail = (node*)malloc(sizeof(Node));
node_tail->data = m; //这几句是关键
node_tail1->next = node_tail;
node_tail1 = node_tail;
scanf_s("%d", &m);
}
node_tail1->next = NULL; // 尾节点的指针应指向null
return link;
}
void ptf_linklist(node* link) //打印链表中的值
{
node* ptf = link->next;
while (ptf!=NULL)
{
printf("%d ", ptf->data);
ptf = ptf->next;
}
}
下期更新查找,替换等。