链表面试题(七)---合并两个有序链表

一、结构体的定义

typedef int DataType;

typedef struct ListNode//定义结点
{
    DataType data;
    struct ListNode* next;
}ListNode,*PListNode;

typedef struct  PList//定义一个成员是指向结点的指针的结构体
{
    PListNode PHead;
}PList,*PList;

二、函数实现
(1)合并两个有序链表(非递归)

//7.合并两个有序链表(非递归)
PListNode  ConnectList(PList PList1,PList PList2)
{
    PListNode cur1=NULL;//用于遍历链表PList1
    PListNode cur2=NULL;//用于遍历链表PList2
    PListNode NewHead=NULL;//指向新链表的第一个结点的指针(一旦确定就不动)
    PListNode tail=NULL;//新链表的尾指针(每次连接一个新结点,更新一次)
    assert(PList1&&PList2);
    cur1=PList1->PHead;
    cur2=PList2->PHead;
    //1.如果两个链表相等(即就是说合并一个链表),包括两个链表都是空,返回任意一个
    if (PList1->PHead==PList2->PHead)
    {
        return PList1->PHead;
    }
    //2.如果两个链表不相等,且一个为空,返回不为空的链表的头指针;
    if (PList1->PHead==NULL)
    {
        return  PList2->PHead;
    }
    if (PList2->PHead==NULL)
    {
        return PList1->PHead;
    }
    //3.确定新链表的头结点

    //如果链表1的头结点的值小于链表2,新链表的头指向链表1的第一个结点,尾结点也是第一个结点
    //然后更新当前结点;
    if (cur1->data<cur2->data)
    {
        NewHead=cur1;
        tail=cur1;
        cur1=cur1->next;
    }
    else
    {
        NewHead=cur2;
        tail=cur2;
        cur2=cur2->next;
    }

    //4.开始比较并且连接
    while (cur1&&cur2)//当两个链表同时没有走完时,进去连接
    {
        if (cur1->data<cur2->data)
        {

            tail->next=cur1;//给心链表尾部连接结点
            tail=tail->next;//更新新链表的尾部
            cur1=cur1->next;//更新当前结点的为下一个结点
        }
        else
        {
            tail->next=cur2;
            tail=tail->next;
            cur2=cur2->next;
        } 
    }
    //5.等到有一个连接完毕,循环出来

    //当一个链表全部元素连接完毕,那么将另一个链表剩下的元素的头连接到新元素的尾
    if (cur1==NULL)
        tail->next=cur2;
    else
        tail->next=cur1;
    return NewHead;
}

(2)合并两个链表(递归)

//7.1合并两个链表(递归)
PListNode ConnectList1(PListNode PHead1,PListNode PHead2)
{
    PListNode cur1=NULL;
    PListNode cur2=NULL;
    PListNode NewNode=NULL;
    cur1=PHead1;
    cur2=PHead2;

    //1.特殊情况处理
    if (PHead1==PHead2)//两个要合并的链表相同(包括两个链表都为空),任意返回一个
    {
        return PHead1;
    }
    //只有一个链表空,返回指向不为空的链表的第一个结点的指针
    if (PHead1==NULL)
    {
        return PHead2;
    }
    if (PHead2==NULL)
    {
        return PHead1;
    }

    //2.确定新链表的

    if (cur1->data < cur2->data)
    {
        NewNode=cur1;
        cur1=cur1->next;
        NewNode->next=ConnectList1(cur1,cur2);
    }
    else
    {
        NewNode = cur2;
        cur2=cur2->next;
        NewNode->next=ConnectList1(cur1,cur2);
    }

    return NewNode;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目  录  一 使用Axis和XFire发布Web Service ......................................................................................... 2  1.1 准备工作............................................................................................................................ 2  1.1.1 新建工程 ................................................................................................................. 2 1.1.2 axis依赖文件 ........................................................................................................... 3 1.1.3 XFire依赖文件 ........................................................................................................ 3 1.2 Axis发布Web Service ........................................................................................................ 4  1.2.1 传递简单数据类型的Web Service ........................................................................ 4 1.2.2 带自定义对象传递的Web Service ........................................................................ 8 1.3 XFire发布Web Services ................................................................................................... 10  1.3.1 传递简单数据类型的Web Service ...................................................................... 10 1.3.2传递复杂数据类型的Web Service ....................................................................... 12 附录: 1Server的结构 ............................................................................................................. 16 二 调用Web Services .................................................................................................................... 17  2.1 准备工作.......................................................................................................................... 17  2.1.1 新建工程 ............................................................................................................... 17 2.1.2 启动Tomcat上发布的1Server服务 ................................................................... 17 2.2 Axis发布的Web Service调用方式 ................................................................................. 18  2.2.1 Dynamic Invocation Interface (DII)方式 ................................................................. 18 2.2.2 Dynamic Proxy方式 ............................................................................................... 19 2.2.3 Stubs方式 .............................................................................................................. 20 2.3调用XFire发布的Web Service ....................................................................................... 22  2.3.1服务以jar包形式发布的时候 直接调用 ............................................................ 23 2.3.2 使用Axis的Client包 ........................................................................................... 23 2.3.3 使用Xfire的Client包 .......................................................................................... 24 附录2:2Client目录结构 ..................................................................................................... 31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值