剑指offer 合并两个排序的链表

剑指offer 合并两个排序的链表

  • 题目描述

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

  • 解法

用归并排序的思想来解决。运行时间:0ms;占用内存:8568k。

/*
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;
		else if (pHead2 == NULL)
			return pHead1;

		ListNode* ret;
		if (pHead1->val <= pHead2->val){
			ret = pHead1;
			pHead1 = pHead1->next;
		}
		else{
			ret = pHead2;
			pHead2 = pHead2->next;
		}
		ListNode* p = ret;
		while (pHead1 != NULL && pHead2 != NULL){
			if (pHead1->val <= pHead2->val){
				p->next = pHead1;
				pHead1 = pHead1->next;
			}
			else{
				p->next = pHead2;
				pHead2 = pHead2->next;
			}
			p = p->next;
		}
		if (pHead1 != NULL)
			p->next = pHead1;
		else if (pHead2 != NULL)
			p->next = pHead2;
		return ret;
    }
};
弹钢琴的猫 /
Published under (CC) BY-NC-SA in categories 算法  tagged with 剑指offer