题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
方法1:使用vector保存,再将元素存到新链表中
① 首先有几种特殊情况,需要返回对应的值
思路:考虑一般的情况
这里为了避免去创建结点,想了一个办法:
就是让新链表的表头指向pHead1,然后链表1到头后再将pHead2连接上去,这样,在后面赋值的时候就可以一一对应起来。
② 取一个额外的指针,让其能够完全遍历链表1
如下图,遍历完之后,p1就指向了链表1的最后一个结点
此时p1指向的结点指针域为空,退出while循环
但此时p1指向的结点的数据域的数据还没有push_back到vector中,于是在退出while循环之后需要再push一次。
③ 令此时p1的指针域为pHead2指向的地址
此时两个链表已经联系在一起,如图所示
④ 对p2也做相同的操作,此时vector中已经存好了两个链表中的所有的值
⑤ 对vector做一下sort保持升序排列
⑥ 利用迭代器和之前的pNew完成赋值,然后return pHead1即可
/*
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;
else if(pHead1 == NULL && pHead2 == NULL)
return NULL;
else