思维导图
![](https://img-blog.csdnimg.cn/direct/8d2bd09cf59e4cd18fa2ffd280f813b1.png)
单链表按位置删除
void delete_pos(node_p H, int pos){
if(H==NULL){
printf("入参为空\n");
}
//判空
if(empty_link(H)){
printf("链表为空\n");
return;
}
//位置合理性检查
if(pos<=0 || pos>H->data){
printf("位置不合理\n");
}
//找第pos-1位置的结点
node_p p=H;
for(int i=0;i<pos-1;i++){
p=p->next_p;
}
//保存删除位置结点的地址,为了后面的释放
node_p temp=p->next_p;
//改变链接关系
p->next_p=p->next_p->next_p;
free(temp);
H->data--;
}
计算结构体大小
#pragma pack(2) //指定两字节对齐
typedef struct
{
char x;
struct A
{
short a;
int* b;
char c;
}p;
long b;
}T;
#pragma pack()
//22字节
![](https://img-blog.csdnimg.cn/direct/6c458c58658d4cae80dcb0f7044a7cda.png)