C++实现合并两个排序的链表
本文实例为大家分享了C++合并两个排序的链表,供大家参考,具体内容如下
问题描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
structListNode{ intval; structListNode*next; ListNode(intx): val(x),next(NULL){ } };
方法一
classSolution{ public: ListNode*Merge(ListNode*pHead1,ListNode*pHead2) { ListNode*newList=NULL;//新链表头 ListNode*newListRear=NULL;//新链表尾 //先处理某个链表为空的情形 if(pHead1==NULL){ returnpHead2; } if(pHead2==NULL){ returnpHead1; } //把数值小的结点放入新链表,生成头节点 if(pHead1->val<=pHead2->val){ newList=pHead1; newListRear=pHead1; pHead1=pHead1->next; }else{ newList=pHead2; newListRear=pHead2; pHead2=pHead2->next; } //两表均不空的情形下,遍历 while(pHead1!=NULL&&pHead2!=NULL){ if(pHead1->val<=pHead2->val){ newListRear->next=pHead1; newListRear=pHead1; pHead1=pHead1->next; }else{ newListRear->next=pHead2; newListRear=pHead2; pHead2=pHead2->next; } } //某一表为空时,把另一表接入新表表尾 if(pHead1==NULL){ newListRear->next=pHead2; } if(pHead2==NULL){ newListRear->next=pHead1; } returnnewList; } };
方法二(递归思想)
classSolution{ public: ListNode*Merge(ListNode*pHead1,ListNode*pHead2) { if(pHead1==NULL){ returnpHead2; } if(pHead2==NULL){ returnpHead1; } if(pHead1->val<=pHead2->val){//pHead1为合并后的头节点 pHead1->next=Merge(pHead1->next,pHead2); returnpHead1; }else{//pHead2为合并后的头节点 pHead2->next=Merge(pHead1,pHead2->next); returnpHead2; } } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。