合并两个排序的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
要求:空间复杂度O(1),时间复杂度O(n)
如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6}
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2) {
if (pHead1 == NULL) return pHead2;
if (pHead2 == NULL) return pHead1;
struct ListNode* p1 = pHead1;
struct ListNode* p2 = pHead2;
struct ListNode* t1 = NULL;
struct ListNode* t2 = NULL;
if (pHead1->val < pHead2->val) {
p1 = pHead1;
p2 = pHead2;
} else {
p1 = pHead2;
p2 = pHead1;
}
while (p1->next != NULL && p2 != NULL) {
if (p1->next->val > p2->val) {
t1 = p1->next;
t2 = p2->next;
p1->next = p2;
p2->next = t1;
p2 = t2;
}
p1 = p1->next;
}
if (p2 != NULL) {
p1->next = p2;
}
return (pHead1->val < pHead2->val) ? pHead1 : pHead2;
}
主要思路:让p1是两个序列中第一个值小的那一列,通过p1的移动来和p2的值比大小移动节点的指针域,遍历完之后如果p2还有值只需让p1->next=p2即可实现一条有序链表

浙公网安备 33010602011771号