定义
// 【结点】类型————>链表是一个结点一个结点地生成
struct Node{
/*C++ 中,由于结构体名可以直接作为类型名使用,所以不需要 typedef
*/
int data;
struct Node* next;
}Node, *LinkList; //2个别名
初始化【头插法】创建表
void createList(LinkList& L, int a[], int n){
//表指针L指向【头结点】
L=(Node*)malloc(sizeof(Node));
L->next =NULL;
//【头】插法插入新结点
for(int i=0;i<n;i++){
//需要引入指针p——>指向每一个【新结点】
Node* p=(Node*)malloc(sizeof(Node));
p->data=a[i];
s->next=L->next;
L->next=s;
}
}
插入【头插法】
void insert(LinkList& L, int e){
Node* p=(Node*)malloc(sizeof(Node));
p->data=e;
p->next=L->next;
L->next=p;
L.length++;
}
插入【尾插法】
需要遍历链表——>找到最后一个节点pre(next域为NULL)
void insert(LinkList& L, int e){
Node* p=(Node*)malloc(sizeof(Node));
p->data=e;
Node* pre=L;
//寻找前驱pre
while(pre->next){ //后移
pre=pre->next;
}
pre->next=p;
p->next=NULL;
L.length++;
}
按【值】删除
需要遍历链表——>找到删除节点的【前驱】pre
bool delete(LinkList& L, int e){
Node* pre=L;
//寻找前驱pre
while(pre->next && pre->data!=e){ //后移
pre=pre->next;
}
if(pre->next){
Node* s=pre->next;//先保存,后释放
pre->next=s->next;
free(s);
return true;
}else{
return false;
}
}