线性表操作(二)

删除单链表中最小值节点

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";}
}

 

posted on 2019-09-26 21:48  一仟零一夜丶  阅读(210)  评论(0)    收藏  举报