提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
记录了我一些关于单链表的学习经验,为了防止忘记,特地记录一下。
单链表的两种创建方式
1. 主函数中创建头节点(运用了头插法和尾插法)
#include <stdio.h>
typedef struct Node
{
int data;
struct Node *next;
} Node;
//头插法
void test(Node * L,int n,int a[])
{
Node *r;
int i;
for(i = 0;i<n;i++)
{
r = (Node*)malloc(sizeof(Node));
r->data = a[i];
r->next = L->next;
L->next = r;
}
}
//尾插法
//void test(Node *L,int n,int a[])
//{
// Node *r,*p;
// r = L;
// int i;
// for(i=0;i<n;i++)
// {
// p = (Node*)malloc(sizeof(Node));
// p->data = a[i];
// r->next = p;
// r = r->next;
// }
// r->next = NULL;
//}
void test01(Node *L,int n)
{
int i;
Node * r = L->next;
while(r!=NULL)
{
printf("%d ",r->data);
r = r->next;
}
}
int main()
{
Node L;
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
test(&L,n,a);
test01(&L,n);
return 0;
}
2.通过函数来创建链表的头结点(运用了头插法和尾插法)
#include <stdio.h>
typedef struct Node
{
int data;
struct Node * next;
} Node,*Linklist;
//头插法
//Linklist test(int n,int a[])
//{
// Linklist L,R;
// L = (Linklist*)malloc(sizeof(Linklist));
// L->next = NULL;
// int i;
// for(i=0;i<n;i++)
// {
// R = (Node*)malloc(sizeof(Node));
// R->data = a[i];
// R->next = L->next;
// L->next = R;
// }
//
// return L;
//
// }
//尾插法
Linklist test(int n,int a[])
{
Linklist L,P,R;
L = (Linklist*)malloc(sizeof(Linklist));
L->next = NULL;
R=L;
int i;
for(i=0;i<n;i++)
{
P = (Node*)malloc(sizeof(Node));
P->data = a[i];
R->next = P;
R = R->next;
}
R->next = NULL;
return L;
}
void test01(Node *L)
{
int i;
Node * P = L->next;
while(P!=NULL)
{
printf("%d ",P->data);
P = P->next;
}
}
int main()
{
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
Linklist L = test(n,a);
test01(L);
return 0;
}
总结
这里面就是我对单链表的创建与输出的理解。