刷题:合并两个排序的链表

  • 题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
  • idea:首先判定两个链表是否有空。然后就选择两个链表中较小值接入,最后把剩下那个链表接上。
/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        ListNode  *res, *p1=pHead1, *p2=pHead2, *p;
        if (!p1) return p2;
        if (!p2) return p1;
        if (pHead1->val < pHead2->val){
            res = p1;
            p = p1;
            p1 = p1->next;
            
        }
        else{
            res = p2;
            p = p2;
            p2 = p2->next;
        }
        while (p1 && p2){
            if (p1->val < p2->val){
                p->next = p1;
                p1 = p1->next;
                p = p->next;
            }
            else{
                p->next = p2;
                p2 = p2->next;
                p = p->next;
            }
        }
        if (p1){
            p->next = p1;
        }
        else if (p2){
            p->next = p2;
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/nickkissbaby_/article/details/89256102