zoukankan      html  css  js  c++  java
  • 链表的相关算法及应用(二)

    目录:

    问题一:递归删除一个不带头结点的单链表L中的所有值为x的结点 

    问题二:反向输出单链表中节点的值

    问题三 :删除单链表中最小值的节点

    问题四 :删除值介于 a b之间的节点

    问题五 :找出两个链表的公共节点

    //问题一:递归删除一个不带头结点的单链表L中的所有值为x的结点 
    void delX(LinkList &h,elemType x){
        LNode *t;
        if(h==NULL)
            return;
        else if(h->data==x){
            t=h;
            h=h->next;
            free(t);
            delX(h,x);
        }else
            delX(h->next,x);
        
    }
    
    //问题一:方法二 迭代 
    void delX2(LinkList &L,elemType x){
        while(L&&L->data==x)
            L=L->next;
        LNode *pre=L;
        LNode *p=L->next;
        LNode *t;
        while(p){
            while(p&&p->data==x){
                t=p;
                p=p->next;
                free(t);
            }
            pre->next=p;
            pre=p;
            if(p)
                p=p->next;
        }
    }
    //问题二:反向输出单链表中节点的值
    void printReverse(LinkList L){
        if(L->next!=NULL)
            printReverse(L->next);
        printf("%d ",L->data);
    } 
    //问题三 删除单链表中最小值的节点
    void delMin(LinkList &L){
        LNode *pre=L;
        LNode *p=L->next;
        LNode *min = L->next;
        while(p->next){
            if(p->next->data<min->data){
                min = p;
            }
            p=p->next;
        }
        LNode *t=min->next;
        min->next=min->next->next;
        free(t);
    } 
    //问题四 删除值介于 a b之间的节点
    void delBetween(LinkList &L,elemType a,elemType b){
        LNode *pre=L,*p=L->next;
        while(p){
            while(p&&p->data>=a&&p->data<=b)
                p=p->next;
            pre->next=p;
            pre=p;
            if(p)
                p=p->next;
        }
    } 
    //问题五 找出两个链表的公共节点
    LinkList search_common(LinkList L1,LinkList L2){
        int len1=0,len2 = 0;
        LNode *p1=L1->next,*p2 = L2->next;
        while(p1){
            len1++;
            p1=p1->next;
        }
        while(p2){
            len2++;
            p2=p2->next;
        }
        LNode *longList;
        LNode *shortList;
        int dist;
        if(len1>len2){
            longList = L1->next;
            shortList = L2->next;
            dist = len1-len2;
        }else{
            longList = L2->next;
            shortList = L1->next;
            dist = len2-len1;
        }
        while(dist--)
            longList = longList->next;
        while(longList!=shortList){
            longList = longList->next;
            shortList = shortList->next;
        }
        return longList;
        
    }
  • 相关阅读:
    30道四则运算
    《梦断代码》第0章读书随笔
    《梦断代码》阅读计划
    [记录] Mybatis原理
    GitLab登录密码重置后无法使用idea拉取代码提交代码问题解决
    写邮件和回复邮件
    XMLDocument 方法中实现post发送消息
    愿我温柔如水,坚强如钢!
    第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考
    IE兼容性问题解决方案2--css样式兼容标签
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9360038.html
Copyright © 2011-2022 走看看