描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
思路:
1.将链表2的节点迁过来
2.链表1的节点val小于链表2的节点val时,链表1节点往后走,直到找到比当前链表2节点val大的节点,进行头插
3.头插注意是否修改列链表1的头节点
4.结束条件:链表1遍历完了||链表2遍历完了
链表1遍历完的情况:1中的最大val没有链表2中的val大
链表2遍历完的情况:2中的最大val没有链表1中的val大
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
//将pHead2中的节点插入到pHead1中
//需要连接就需要parent节点
ListNode* parent = nullptr;
ListNode* cur1 = pHead1;
ListNode* cur2 = pHead2;
while(cur1&&cur2)
{
//1.如果cur1->val小于cur2->val
if(cur1->val < cur2->val)
{
parent = cur1;
cur1 = cur1->next;
}
//2.如果cur1->val大于||等于cur2->val
else {
ListNode* next = cur2->next;
//如果是头插,需要修改pthread的头指针
if(parent == nullptr)
{
cur2->next = cur1;
pHead1 = cur2;
}
else {
parent->next = cur2;
cur2->next = cur1;
}
//注意这里需要更改parent
parent = cur2;
cur2 = next;
}
}
if(cur2)
{
parent->next = cur2;
}
return pHead1;
}
};