//王道 P38 2 void Del_x_4(LinkList &L,ElemType x){ LNode *p=L->next,*pre=L,*q; //遍历链表 while(p!=NULL){ //找到数值相同节点,删除 if(p->data==x){ q=p; p=p->next; pre->next=p; free(q); }else{ pre=p; p=p->next; } } } //王道 P38 3 void R_Print(LinkList &L){ //先找到最后的元素 if(L->next!=NULL){ R_Print(L->next); } //反向输出 if(L!=NULL){ printf("%d\t",L->data); } } void R_Ignorance_Head(LinkList &L){ if(L!=NULL){ R_Print(L->next); } } //王道P38 3 LinkList Del_min_x(LinkList &L){ //定义四个变量分别指向不同的位置 LNode *pre=L,*p=pre->next; LNode *minpre=pre,*minp=p; //遍历链表 while(p!=NULL){ if(p->data<minp->data){ minp=p; minpre=pre; } //后面继续遍历 pre=p; p=p->next; } //删除最小元素 minpre->next=minp->next; free(minp); return L; } //王道 P38 5(反转链表) LinkList Reverse_L(LinkList &L){ //定义指针 LNode *p,*r; //断链并存储地址 p=L->next; L->next=NULL; while(p!=NULL){ //保存下一个地址 r=p->next; //头插 p->next=L->next; L->next=p; //将p重新指向r p=r; } } //王道 p38 6 LinkList Sort(LinkList &L){ LNode *p,*r,*pre; //断链 p=L->next; r=p->next; p->next=NULL; p=r; //遍历 while(p!=NULL){ //保存节点 r=p->next; pre=L; while(pre->next!=NULL && pre->next->data<p->data){ pre=pre->next; } //找到位置插入位置 p->next=pre->next; pre->next=p; p=r; } return L; }