一:头插法
#include<stdio.h>
#include<stdlib.h>
typedef struct link{
int x; // 数据域
struct link * next; // 指针域
}LINK;
int main()
{
LINK* head = (LINK*)malloc(sizeof(LINK)); // 头节点
LINK *current;
head->next = NULL;
int number;
while(scanf("%d",&number) ==1 && number != -1)
{
current = (LINK*) malloc(sizeof(LINK));
current->x = number;
current->next = head->next ; // 新结点为原来结点的地址
head->next = current; // 头节点指向新结点
}
LINK *p;
for(p = head->next ; p ; p = p->next ) // 遍历输出
{
printf("%d\t",p->x );
}
for(p = head ; p ; p = head ) // 释放空间
{
head = p->next ;
free(p);
}
return 0;
}
二:尾插法
#include<stdio.h>
#include<stdlib.h>
typedef struct link{
int x; // 数据域
struct link * next; // 指针域
}LINK;
int main()
{
LINK* head = NULL; // 头节点
LINK *current ,*prev;
int number;
while(scanf("%d",&number) ==1 && number != -1)
{
current = (LINK*) malloc(sizeof(LINK));
current->x = number;
if(head == NULL) // 判断是否是第一个结构
head = current;
else
prev->next = current;
current->next = NULL; // 当前结点的指针指向NULL 表明是最后一个结构
prev = current;
}
LINK *p;
for(p = head ; p ; p = p->next ) // 遍历输出
{
printf("%d\t",p->x );
}
for(p = head ; p ; p = head ) // 释放空间
{
head = p->next ;
free(p);
}
return 0;
}