zoukankan      html  css  js  c++  java
  • 不带头结点的两个链表合并为一个链表

    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    typedef struct LNode{
    int data;
    struct LNode *next;
    }LNode,*LinkList;

    void CreateList(LinkList &L,int n){
    L=(LinkList)malloc(sizeof(LNode));
    L=NULL;
    LinkList r;
    r=(LinkList)malloc(sizeof(LNode));
    LinkList p;
    int i;
    for(i=0;i<n;i++){
    p=(LinkList)malloc(sizeof(LNode));
    scanf("%d",&p->data);
    if(L==NULL){
    r=p;
    L=p;
    }else{
    r->next=p;
    r=p;}
    }
    r->next=NULL;
    }

    void Visit(LinkList L){
    while(L)
    {
    printf("%d ",L->data);
    L=L->next;
    }
    }

    void MergeList(LinkList &H1,LinkList &H2){
    LinkList phead = H1;
    LinkList p= H1->next;
    LinkList q= H2;
    if(H1->data > H2->data)
    {
    phead = H2;
    p = H2->next;
    q = H1;
    }

    LinkList s = phead;

    while(p!=NULL && q!=NULL)
    {
    if(p->data < q->data)
    {
    s->next = p;
    p = p->next;
    s = s->next;
    }
    else if(p->data>q->data)
    {
    s->next = q;
    q = q->next;
    s = s->next;
    }
    else
    {
    s->next = p;
    p = p->next;
    q = q->next;
    s = s->next;
    }

    }

    if(p == NULL)//主链表先遍历完,说明另一链表还有数据得接过来
    {
    s->next = q;
    }

    if(q == NULL)//另一链表先遍历完,因为此时主链表的结构已经发生变化,所以仍需拼接过来
    {
    s->next = p;
    }
    H1=phead;
    }

    int main(){
    LinkList p;
    CreateList(p,3);
    Visit(p);
    printf(" ");

    LinkList q;
    CreateList(q,3);
    Visit(q);
    printf(" ");

    MergeList(p,q);
    Visit(p);
    printf(" ");

    return 0;
    }

     运行结果

  • 相关阅读:
    SpringMVC 拦截器不拦截静态资源的三种处理方式
    Tomcat启动失败问题 (指定的主资源集 [D:javaapache-tomcat-9.0.35webappsAppManageSystem] 无效)
    oracle转postgresql FOR UPDATE WAIT 5 处理
    jq插件验证
    HTML5数据储存
    canvas 一些 用法大全
    HTML canvas 绘图
    CSS3
    HTML 核心内容
    HTML5 媒体
  • 原文地址:https://www.cnblogs.com/Dearmyh/p/9976249.html
Copyright © 2011-2022 走看看