`指针
typedef struct Node{
int data;
struct Node *next;
}Node;code
Node *CreatH(); //尾插法创建链表
Node * CreatH1(); // 头插法创建链表
void Show(Node *); //输出链表
void Ease(Node *); //链表释放内存
int main(void)
{
Node *Head, *Head1;
Head = CreatH();
Show(Head);
Head1 = CreatH1();
Show(Head1);
Ease(Head);io
return 0;
}链表
Node *CreatH() //尾插法
{
int x;
Node *Head;
Head = (Node *)malloc(sizeof(Node));
Head->next=NULL; //初始化
Node *r; //尾指针next
r = Head; //尾指针始终要指向最后一个结点,即最新建立的那个结点。 while(scanf("%d", &x)!=EOF){ Node *p = (Node *)malloc(sizeof(Node)); p->data = x; r->next = p; //将p链接到链表末尾 r = p; //r指向新的链表末尾 } r->next=NULL; return Head;
}数据
Node * CreatH1() //头插法创建链表
{
int x;
Node *Head; //头指针
Node *p;di
Head = (Node *)malloc(sizeof(Node)); //头结点 Head->next=NULL; while(scanf("%d", &x)!=EOF){ p = (Node *)malloc(sizeof(Node)); /* 申请新结点 必定不能这样写:Node p; 不能够直接定义一个结构体,若是这样,创建的链表在代码块结束后就会被释放掉。 必须动态分配一块内存,而后定义一个指针指向。 */ p->data = x; p->next = Head->next; Head->next = p; } return Head;
}while
void Show(Node *Head) //输出链表
{
Node *p;co
p = Head->next; //不能够是 P = Head; while(p!=NULL){ // while(p->Head!=NULL) 这样写的话,最后一个结点的数据就没法读取到。 printf("%d ", p->data); p = p->next; } printf("\nend\n"); return ;
}
void Ease(Node *Head) //释放链表,背下来就行。
{
Node *p;
while(Head!=NULL){
p = Head;
Head = Head->next;
free(p);
}
return ;
}
`