头插法
这是头插法的内存图
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int value;
struct Node* next;
}N;
void showlink(N* aa){
for(;;){
if(aa!=NULL){
printf("节点值%d\n",aa->value);
aa=aa->next;
}else{
break;
}
}
}
int main(int argc,char *argv[]){
int arr[8]={1,2,3,4,5,6,7,8};
N* link=NULL;
int i;
for(i=0;i<sizeof(arr)/4;i++){
N* x=(N*)malloc(sizeof(N));
x->value=arr[i];
x->next=link;
link=x;
}
showlink(link);
return 0;
}
注意:
非指针类型变量X=非指针类型变量Y ,X拷贝Y的第三部分到自己部分
指针类型 x=指针类型y x和y指向一致,之后x不随y改变指向而改变
尾插法
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int value;
struct Node* next;
}N;
void showlink(N* aa){
for(;;){
if(aa!=NULL){
printf("节点值%d\n",aa->value);
aa=aa->next;
}else{
break;
}
}
}
int main(int argc,char *argv[]){
int arr[8]={1,2,3,4,5,6,7,8};
N* link2=(N*)malloc(sizeof(N));
N* flag=link2;
int k;
for(k=0;k<sizeof(arr)/4;k++){
N* x=(N*)malloc(sizeof(N));
x->next=NULL;
x->value=arr[k];
flag->next=x;
flag=flag->next;
}
link2=link2->next;
showlink(link2);
return 0;
}