思维导图
作业
//按位置修改
int change_pos(node_p H,int pos,datatype data)
{
if(H==NULL||node_empty(H)||pos<=0||pos>H->len)
{
printf("---按位置修改失败,请检查---\n");
return 0;
}
node_p p=H->next;//找到需要的位置
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
p->data=data;
return 1;
}
//按值查找并返回下标
int find_id(node_p H,datatype data)
{
if(H==NULL||node_empty(H))
{
printf("---查找有误,请检查---\n");
return 0;
}
node_p p=H->next;
for(int i=0;i<H->len;i++)
{
if(p->data==data)
{
printf("值%d对应的下标为:%d\n",data,i);
return 1;
}
p=p->next;
}
printf("---链表内查无此值,请检查---\n");
return 0;
}
//链表逆置
void overturn(node_p H)
{
if(H==NULL||node_empty(H)||H->next->next==NULL)
{
printf("---逆置有误,或只有一个元素---\n");
return;
}
node_p p=H->next->next;
H->next->next=NULL;//将第一个节点指向最后
node_p q=NULL;
while(p!=NULL)//相当于重新把所有元素来一次头插
{
//从第二个节点开始头插
q=p->next;
p->next=H->next;
H->next=p;
p=q;//节点向后移
}
}
//销毁
int node_free(node_p *H)
{
if(*H==NULL||node_empty(*H))
{
printf("---链表销毁有误,请检查---\n");
return 0;
}
free(*H);
*H=NULL;
printf("---链表销毁成功---\n");
return 1;
}