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

合并两个已排序的链表

2016-06-17 15:32 316 查看
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

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

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

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

/*

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;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息