头插法
也就是说头结点就是最新的节点,新节点一进来就是头节点。
#include <stdio.h>
//定义结构体
struct Test
{
int data;
struct Test *next;
};
//输出链表数据
void printLink(struct Test *head)
{
struct Test *piont = head;
while(piont != NULL){
printf("%d ",piont->data);
piont = piont->next;
}
putchar('\n');
}
struct Test *insertLinkForHead(struct Test *head)
{
struct Test *new;
//开辟空间
new = (struct Test *)malloc(sizeof(struct Test));
//输入数据
printf("input you new node data:\n");
scanf("%d",&(new->data));
//如果链表为空把就把新的节点作为头节点
if(head == NULL){
head = new;
return head;
}else{
new->next = head;
head = new;
}
return head;
}
int main()
{
int n;
printf("Please enter the number of nodes\n");
scanf("%d",&n);
struct Test *head = NULL;
while(n--){
head = insertLinkForHead(head);
}
printLink(head);
return 0;
}
尾插法
即尾结点就是最新的节点。
#include <stdio.h>
//定义结构体
struct Test
{
int data;
struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{
struct Test *piont = head;
while(piont != NULL){
printf("%d ",piont->data);
piont = piont->next;
}
putchar('\n');
}
struct Test *insertLinkForTail(struct Test *head)
{
struct Test *new;
struct Test *point = head;
//开辟空间
new = (struct Test *)malloc(sizeof(struct Test));
//输入数据
printf("input you new node data:\n");
scanf("%d",&(new->data));
//如果链表为空把就把新的节点作为头节点
if(head == NULL){
head = new;
return head;
}
//当当前结点的指向不为空时说明还未到达尾结点,继续向下偏移
while(point->next != NULL){
point = point->next;
}
//偏移完成后尾结点指向新节点,新节点变为尾结点
point->next = new;
return head;
}
int main()
{
int n;
printf("Please enter the number of nodes\n");
scanf("%d",&n);
struct Test *head = NULL;
while(n--){
head = insertLinkForTail(head);
}
printLink(head);
return 0;
}
执行结果: