码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer系列源码-合并两个排序的链表

时间:2014-12-07 21:45:25      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   使用   sp   for   on   

题目1519:合并两个排序的链表
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1309解决:615
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
(hint: 请务必使用链表。)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。
下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包含m个元素,s(1<=t<=1000000)。
输出:
对应每个测试案例,
若有结果,输出相应的链表。否则,输出NULL。
样例输入:
5 2
1 3 5 7 9
2 4
0 0
样例输出:
1 2 3 4 5 7 9
NULL

#include<stdio.h>
#include<iostream>
using namespace std;
struct ListNode{
    int value;
    ListNode* next;
};
ListNode* megerList(ListNode* aHead,ListNode* bHead){
    if(aHead==NULL){
        return bHead;
    }
    if(bHead==NULL){
        return aHead;
    }
    ListNode* megeredHead = NULL;
    if(aHead->value<bHead->value){
            megeredHead = aHead;
            megeredHead->next = megerList(aHead->next,bHead);
    }else{
            megeredHead = bHead;
            megeredHead->next = megerList(aHead,bHead->next);
    }
    return megeredHead;
}
int main(){
    int n,m;
    ListNode* aNode;
    ListNode* aHead;
    ListNode* bNode;
    ListNode* bHead;
    while(scanf("%d%d",&n,&m)!=EOF){
        if(n<=0&&m<=0){
            printf("NULL\n");
            continue;
        }
        //构造链表
       for(int i=0;i<n;i++){
           ListNode* pNew = new ListNode();
            scanf("%d",&pNew->value);
            pNew->next=NULL;
            if(i==0){
                 aNode = aHead = pNew;
            }else{
                aNode->next = pNew;
                aNode = pNew;
            }
       }
       for(int i=0;i<m;i++){
            ListNode* pNew = new ListNode();
            scanf("%d",&pNew->value);
            pNew->next=NULL;
            if(i==0){
                 bNode = bHead = pNew;
            }else{
                bNode->next = pNew;
                bNode = pNew;
            }
       }
        ListNode* megeredHead = megerList(aHead,bHead);
        while(megeredHead->next){
            printf("%d ",megeredHead->value);
            megeredHead = megeredHead->next;
       }
       printf("%d\n",megeredHead->value);
    }
    return 0;
}
oj地址

剑指offer系列源码-合并两个排序的链表

标签:blog   http   io   ar   os   使用   sp   for   on   

原文地址:http://blog.csdn.net/hackcoder/article/details/41790803

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!