1、题目
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)
如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6}
2、思路
在两个链表的节点之间跳,调好了当前节点就向下个节点移动,直到一方为空,然后接上另外一方剩余的节点。
3、代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
ListNode *prehead = new ListNode(-1);
ListNode *prev = prehead;
while(pHead1 && pHead2){
if(pHead1->val > pHead2->val){
prev->next = pHead2;
pHead2 = pHead2->next;
}else{
prev->next = pHead1;
pHead1 = pHead1->next;
}
prev = prev->next;
}
prev->next = pHead1 ? pHead1 : pHead2;
return prehead->next;
}
};