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

    问题六 :将两个单链表的相同的值,组成一个新的链表 

    问题七 :递增输出单链表 并释放节点 

    问题八 :将一个带头结点的单链表A 分解为两个带头结点的单链表A和B使A中保存原来序号为奇数的元素,B中保存原来序号为偶数的元素

    问题九 :将C={a1,b1,a2,b2,...,an,bn},拆分为 A={a1,a2,...,an} B={b1,b2,...,bn}; 

    问题十 :去除递增有序链表中的重复元素 

    //问题六 将两个单链表的相同的值,组成一个新的链表 
    LinkList common(LinkList L1,LinkList L2){
    LNode *t1=L1->next,*t2=L2->next;
    bool yes = 0;
    LNode *h = (LNode*)malloc(sizeof(LNode));
    h->next=NULL;
    while(t1){
    yes=0;
    t2=L2->next;
    while(t2){
    if(t1->data==t2->data){
    yes=1;
    break;
    }
    t2=t2->next;
    }
    if(yes){
    LNode *node = (LNode*)malloc(sizeof(LNode));
    node->data=t1->data;
    node->next=h->next;
    h->next = node;
    }
    t1=t1->next;
    }
    return h;
    }
    //问题七 递增输出单链表 并释放节点
    void min_del(LinkList &L){
    LNode *pre=L,*p=L->next,*t;
    while(L->next!=NULL){
    pre=L;
    p=L->next;
    while(p->next!=NULL){
    if(p->next->data<pre->next->data){
    pre=p;
    }
    p=p->next;
    }
    t=pre->next;
    printf("%d ",t->data);
    pre->next=t->next;
    free(t);
    }
    free(L);
    }
    //问题八 将一个带头结点的单链表A 分解为两个带头结点的单链表A和B
    //    使A中保存原来序号为奇数的元素,B中保存原来序号为偶数的元素
    LinkList disCreate(LinkList &A){
    LinkList B = (LinkList)malloc(sizeof(LNode));
    B->next=NULL;
    LNode *a=A,*b=B;
    LNode *r,*p=A->next;
    int index = 1;
    while(p!=NULL){
    if(index%2){
    a->next=p;
    a=p;
    }else{
    b->next=p;
    b=p;
    }
    index++;
    p=p->next;
    }
    a->next=NULL;
    b->next=NULL;
    
    return B;
    }
    //问题九 将C={a1,b1,a2,b2,...,an,bn},拆分为 A={a1,a2,...,an} B={b1,b2,...,bn}; 
    LinkList disCreate2(LinkList &A){
    LinkList B = (LinkList)malloc(sizeof(LNode));
    B->next=NULL;
    LNode *r,*a=A;
    int index = 1;
    LNode *p = A->next;
    while(p!=NULL){
    r=p->next;
    if(index%2){
    a->next=p;
    a=p;
    }else{
    p->next=B->next;
    B->next=p;
    
    }
    p=r;
    index++;
    }
    a->next=NULL;
    return B;    
    }
    //问题十 去除递增有序链表中的重复元素 
    void moveRepeat(LinkList &L){
    LNode *pre=L,*p=L->next;
    while(p!=NULL){
    if(p->next!=NULL){
    if(p->data!=p->next->data){
    pre->next=p;
    pre=p;
    }
    }else{
    pre->next=p;
    pre=p;
    }
    p=p->next;
    }
    pre->next=NULL;
    }
  • 相关阅读:
    C++雾中风景14:CRTP, 模板的黑魔法
    ClickHouse源码笔记1:聚合函数的实现
    C++雾中风景番外篇4:GCC升级二三事
    C++雾中风景13:volatile解惑
    AeroSpike踩坑手记1:Architecture of a Real Time Operational DBMS论文导读
    Linux 程序设计1:深入浅出 Linux 共享内存
    C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具
    C++雾中风景番外篇2:Gtest 与 Gmock,聊聊C++的单元测试
    C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boost
    用TensorFlow搭建一个万能的神经网络框架(持续更新)
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9360112.html
Copyright © 2011-2022 走看看