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;
    }
  • 相关阅读:
    PHP配置redis支持
    redis入门——redis常用命令
    CentOS7 linux下yum安装redis以及使用
    Linux安装配置git
    Java基础88 数据库设计的三大范式
    Java基础87 MySQL数据约束
    Java基础85 MVC开发模式
    错误/异常:java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind;的解决方法
    Java基础84 javaBean规范
    Java基础83 JSP标签及jsp自定义标签(网页知识)
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9360112.html
Copyright © 2011-2022 走看看