合并两个排序的链表

来源:互联网 发布:c语言代码指令大全 编辑:程序博客网 时间:2024/05/21 09:45

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

递归版本:

 class Solution { public ListNode* Merge(ListNode* list1, ListNode* list2) { if(list1==null) return list2; else if(list2==null) return list1; ListNode mergeHead=null; if(list1.val<list2.val){ mergeHead=list1; mergeHead.next=Merge(list1.next, list2);} else{ mergeHead=list2; mergeHead.next=Merge(list1, list2.next); } return mergeHead; }}
非递归版本:

class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {        ListNode* result = NULL;        ListNode* current = NULL;                 if(pHead1 == NULL)            return pHead2;        if(pHead2 == NULL)            return pHead1;        while(pHead1 != NULL && pHead2 != NULL){            if(pHead1->val <= pHead2->val){                if(result == NULL){                    current = result = pHead1;                } else {                    current->next = pHead1;                    current = current->next;                }                pHead1 = pHead1->next;            } else {                if(result == NULL){                    current = result = pHead2;                } else {                    current->next = pHead2;                    current = current->next;                }                pHead2 = pHead2->next;            }        }         if(pHead1 == NULL){            current->next = pHead2;        }        if(pHead2 == NULL){            current->next = pHead1;        }         return result;    }};



0 0
原创粉丝点击