1.头插法
#include <stdio.h>
#include <stdlib.h>
//头插法创建链表
struct Test
{
int data;
struct Test *next;
};
struct Test *insertFromHead(struct Test *head,struct Test *new)
{
if(head == NULL){
head = new;
head->next = NULL;
}else{
new->next = head;
head = new;
}
return head;
}
struct Test *createLink(struct Test *head)
{
struct Test *new = NULL;
printf("HINT:Enter 0 End!\n");
while(1){
new = (struct Test *)malloc(sizeof(struct Test));
printf("imput your new to node data\n");
scanf("%d",&(new->data));
if(new->data == 0){
free(new);
return head;
}
head = insertFromHead(head,new);
}
}
void printLink(struct Test *head)
{
struct Test *p = head;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
putchar('\n');
}
int main()
{
struct Test *head = NULL;
head = createLink(head);
printLink(head);
struct Test t1 = {999,NULL};
head = insertFromHead(head,&t1);
printLink(head);
return 0;
}
2.尾插法
#include <stdio.h>
#include <stdlib.h>
//尾插法创建链表
struct Test
{
int data;
struct Test *next;
};
struct Test *insertBehind(struct Test *head,struct Test *new)
{
struct Test *p = head;
if(p == NULL){
head =new;
return head;
}
while(p->next != NULL){
p = p->next;
}
p->next = new;
return head;
}
struct Test *createLink(struct Test *head)
{
struct Test *new;
printf("HINT:Enter 0 End!\n");
while(1){
new = (struct Test *)malloc(sizeof(struct Test));
printf("imput your new to node data\n");
scanf("%d",&(new->data));
if(new->data == 0){
free(new);
return head;
}
head = insertBehind(head,new);
}
}
void printLink(struct Test *head)
{
struct Test *p = head;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
putchar('\n');
}
int main()
{
struct Test *head = NULL;
head = createLink(head);
printLink(head);
return 0;
}