合并两个已排序的链表

来源:互联网 发布:淘宝延长收货最多几天 编辑:程序博客网 时间:2024/05/16 06:39

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

思路:由于两个链表都已经排好序了,那么我们只要对比两个链表的当前头结点,并将较小的那个链接到新链表的后面即可。

注意:有可能一个链表已经遍历完了,另一个链表还没完,只需将剩下链表的元素对应拷入即可。

下面是我的代码实现,不足之处,欢迎批评指正。

/*

struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        if(pHead1==NULL) return pHead2;
        if(pHead2==NULL) return pHead1;
        ListNode* newhead=NULL;
        ListNode* temp=NULL;
        if(pHead1->val<pHead2->val) {
            temp=pHead1;
            pHead1=pHead1->next;
        }
        else {
            temp=pHead2;
            pHead2=pHead2->next;
        }
        newhead=temp;
        while(pHead1&&pHead2){
            if(pHead1->val<pHead2->val) {
                temp->next=pHead1;
                temp=temp->next;
                pHead1=pHead1->next;
            }
            else {
                temp->next=pHead2;
                temp=temp->next;
                pHead2=pHead2->next;
            }
        }
        while(pHead1){
            temp->next=pHead1;
            temp=temp->next;
            pHead1=pHead1->next;
        }
        while(pHead2){
            temp->next=pHead2;
            temp=temp->next;
            pHead2=pHead2->next;
        }
        return newhead;
    }
};
1 0
原创粉丝点击