链表的创建分为头插法和尾插法
头插法:
1、含头结点
#include<stdio.h>s
struct node
{
int data;
struct node * next;
};
typedef struct node linknode;
typedef linknode * linklist;
linklist creatlink()
{
linklist head,p;
int x;
head=(linklist)malloc(sizeof(linknode));
head->next=NULL;
scanf("%d",&x);
while(x)
{
p=(linklist)malloc(sizeof(linknode));
p->data=x;
p->next=head->next;
head->next=p;
scanf("%d",&x);
}
return head;
}
2、不含头结点
linklist creatlink()
{
linklist head=NULL,p;
int x;
scanf("%d",&x);
while(x)
{
p=(linklist)malloc(sizeof(linknode));
p->data=x;
p->next=head;
head=p;
scanf("%d",&x);
}
return head;
}
尾插法:
linklist creatlink()
{
linklist head,p,tail;
int x;
scanf("%d",&x);
head=tail=NULL;
while(x)
{
p=(linklist)malloc(sizeof(linknode));
p->data=x;
if(head==NULL)
head=tail=p;
else
{
tail->next=q;
tail=q;
}
scanf("%d",&x);
}
if(tail)
tail->next=NULL;
return head;
}
头插法创建的链表:输入的一组数与输出的一组数的顺序是相反的。
尾插法创建的链表:输入的一组数与输出的一组数的顺序相同。
链表的输出函数输出函数:
void print(linklist head)
{
linklist p=head;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}