#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node* next;
}Node;
typedef struct Node* list;
bool createlist_tail(list &L);
int main(){
list L;
createlist_tail(L);
}
bool createlist_tail(list &L){ //尾插法创建带头结点的链表
L=(list)malloc(sizeof(Node));
L->next=NULL; //初始化链表
Node* s,*r;//S和r都指向尾结点
int data=0;
s=r=L;
scanf("%d",&data);
while(data!=888){
s=(Node*)malloc(sizeof(Node)); //s指向新申请的节点p
s->next=r->next; //让新节点next指向尾结点的next
s->data=data;
r->next=s; //原来的尾部节点的next指向新的尾部节点
r=s; //r也指向最后一个节点
scanf("%d",&data);//将scanf放到循环尾部,当输入数据不合法便直接跳出,不会再插入节点。
}
}
bool createlist_pri(list &L){ //头插法创建带表头的链表
L=(list)malloc(sizeof(Node));
L->next=NULL; //链表的初始化
int data=0; //data用于给节点赋值
scanf("%d",&data);
while(data!=888){
Node* p=(list)malloc(sizeof(Node));
if(data==888) break; //输入特定值后结束
p->next=L->next; //新节点的下一个节点指向头结点的下一个节点
L->next=p; //每次都插入到头结点后面
p->data=data;
scanf("%d",&data);//将scanf放到循环尾部,当输入数据不合法便直接跳出,不会再插入节点。
}
return true;
}
建立链表其实就是链表的初始化和指定位置的后插操作