您的位置:首页 > 编程语言 > C语言/C++

剑指offer刷题之c++实现的合并两个有序的链表

2015-08-08 12:16 609 查看
#include "myHead.h"
#include "allListNode.h"
/*
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
*/
	ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
    	//简化代码 
//    	if(pHead1 == NULL&& pHead2==NULL)
//    		return NULL;
//        else 
		if(pHead1==NULL)
        	{
        		return pHead2;
        	}
        	else if(pHead2==NULL){
        		return pHead1;
        	}
		ListNode* p,*q,*head;	
		q = NULL;
//简化代码 
//		if(pHead1 != NULL&& pHead2!=NULL){
			while(pHead1 != NULL&& pHead2!=NULL){
				if(pHead1->val <= pHead2->val){
					p = (ListNode *)malloc(sizeof(ListNode));
					p->val = pHead1->val;
					if(q==NULL){
						q = p;
						head = q;
						cout<<"a"<<q->val<<" ";
					}
					else {
						q->next = p;
						q = q->next;
						cout<<"b  "<<q->val<<" ";
					}
					pHead1 = pHead1->next;
				}
				else{
					p = (ListNode *)malloc(sizeof(ListNode));
					p->val = pHead2->val;
					if(q==NULL){
						q = p;
						head = q;
						cout<<"c  "<<q->val<<" ";
					}
					else {
						q->next = p;
						q = q->next;
						cout<<"d  "<<q->val<<" ";
					}
					pHead2 = pHead2->next;
				}
			}
			if(pHead1 != NULL){
				q->next = pHead1;
			}
			else{
				q->next = pHead2;				
			}
//		}
		return head;			 
    }
    int main(){
    	int a[]={2,4,5};
    	int b[] = {1,2,4,6};
    	int alen = sizeof(a)/sizeof(int);
    	int blen = sizeof(b)/sizeof(int);
    	ListNode *h1,*h2,*h;
		h1 = createListNode(a,alen);
		h2 = createListNode(b,blen);
		cout<<"h1:  ";
		printListNode(h1);
		cout<<endl<<"h2:  ";
		printListNode(h2); 
		h=Merge(h1,h2);
		cout<<endl<<"h:  ";
		printListNode(h);
		
    	return 1;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: