劍指offer刷題之c++實現的合併兩個有序的鏈表

#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;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章