线性表操作(二)

mac2022-06-30  98

删除单链表中最小值节点

void Deletemin(LinkList &L){ LinkList p,q; LinkList minpre,pre; pre=L;//最小值节点的前驱 q=pre->next; minpre=pre; p=q; int temp=q->data; while(q!=NULL){ if(p->data>q->data){ p=q; minpre=pre; } pre=q; q=q->next; } minpre->next=p->next; free(p); }

删除单链中所有值为X的节点

void DeleteX(LinkList &L,Elemtype e){ LinkList p,q,r; p=L; q=L->next; while(q){ if(q->data==e){ p->next=q->next; r=q; free(r); q=q->next; } else{ q=q->next; p=p->next; } } }

将单链表逆置,且空间复杂度为0(1)

void Reverse(LinkList &L){ LinkList p,q; p=L->next; L->next=NULL; while(p){ q=p->next; p->next=L->next; L->next=p; p=q;//运用头插法,依次将节点插入到头结点之后 } }

 单链表排序(直接插入算法)

void LinkSort(LinkList &L){ LinkList p,q; LinkList pre; p=L->next; q=p->next; p->next=NULL; p=q; while(p!=NULL){ q=p->next; pre=L; while(pre->next!=NULL&&pre->next->data<p->data){ pre=pre->next; } p->next=pre->next; pre->next=p; p=q; } }

将两个递增的链表合并成一个递减的链表

void MergeList(LinkList &L1,LinkList &L2){ LinkList p1,p2,L,q; CreatList(L); p1=L1->next; p2=L2->next; L->next=NULL; while(p1&&p2){ if(p1->data<p2->data){ q=p1->next; p1->next=L->next; L->next=p1; p1=q;//头插法 } else{ q=p2->next; p2->next=L->next; L->next=p2; p2=q;//头插法 } } if(p1){ p2=p1; }//通常会剩余一个未处理完的链表,接着处理 while(p2){ q=p2->next; p2->next=L->next; L->next=p2; p2=q; } LinkPrint(L); }

判断L2是否为L1的子链

void Pattern(LinkList &L1,LinkList &L2){ LinkList p1,p2; LinkList r; p1=L1->next; p2=L2->next; r=p1; while(p1&&p2){ if(p1->data==p2->data){ p1=p1->next; p2=p2->next; } else{ r=r->next; p1=r; p2=L2->next; } } if(p2==NULL){cout<<"1";} else{cout<<"0";} }

 

转载于:https://www.cnblogs.com/Yshun/p/11594720.html

最新回复(0)