01.画图
02.按位置查找返回元素的值
//11.按位置查找后返回元素的值
int find_pos(node_p H,int pos)
{ if(H==NULL){return -1;} if(pos<0){ return -1; } if(pos<0){ printf("查找的位置不合理.\n"); return -2; } node_p p=H->next;//从第一个数据结点开始遍历 int i; //找到pos结点 for(i=0,p=H;i<pos;i++,p=p->next); //找到pos-1位置结点,判断是否有pos位置 if(p==NULL){ printf("11.位置不合理.\n"); return -2; } return p->data;
}
03.按值修改(多个一样的值修改第一个)
//12.按值修改(多个一样的值修改第一个)
//多个值只修改第一个
void updatavalue(node_p H,int value1,int value2)
{ if(H==NULL){return;} node_p p=H->next; while(p!=NULL){ if(p->data==value1){ p->data=value2; printf("查找%d的值修改为%d的值.\n",value1,value2);return; } p=p->next; } printf("未查找到值为%d的结点,无法修改.\n",value); }
第一种情况:多个值一样修改
//13.按值修改(多个一样的值修改第一个)
//多个值全部修改
void updatavalue(node_p H,int value1,int value2)
{ if(H==NULL){return;} node_p p=H->next; int modified_count=0; while(p!=NULL){ if(p->data==value1){ p->data=value2; modified_count++; } p=p->next; } if(modified_count>0){ printf("成功将%d个值为%d修改为%d.\n",modified_count,value1,value2); }else{ printf("未找到值为%d的结点,无法修改.\n",value1); } }
04.单向链表的逆置
方法01:迭代的思想
//14.单项链表逆置
node_p reverseList(node_p H)
{ if(H==NULL){return NULL;} node_p prev=NULL; node_p curr=H->next; node_p next=NULL; while(curr!=NULL) { //第一步保存curr下一个结点到next指针中next=curr->next; //反转当前结点的指针 curr->next=prev; //移动prev和curr指针 prev=curr; curr=next; } H->next=prev; return H;
}
方法02:头插的思想
node_p reverseList(node_p H)
{ if(H==NULL){return NULL;} node_p new_head=NULL;//初始化新链表的头结点 node_p current=H->next;//用于遍历原链表的指针 node_p next_node;//临时保存当前结点的下一个结点 while(current!=NULL){ next_node=current->next;//保存当前结点下一个结点 current->next=new_head;//将当前结点插入到新链表头部 new_head=current;//更新新链表头结点 current=next_node;//移动到原链表的下一个结点 } H->next=new_head; return H;//返回逆置后链表的头节点 }