将两个单链表合并为一个单链表令L1=(x1,x2,x3……,xn ),L2=(y1,y2,y3,……,yn),设计一个算法合并L1、L2,结果放在线性表L3中, L3=(x1,y1,x2,y2,x3,y3……,xn,yn)
时间: 2023-04-03 11:02:02 浏览: 323
数据结构与算法 c++实现 两个单链表合并为一个单链表,两个表的元素交错排列,新表用原表结点的内存空间 按元素序列的奇偶分割单
5星 · 资源好评率100%
可以使用双指针法,分别指向L1和L2的头节点,依次将节点插入L3中即可。具体实现如下:
1. 定义三个指针p1、p2、p3,分别指向L1、L2、L3的头节点。
2. 循环遍历L1和L2,比较p1和p2指向节点的大小,将较小的节点插入L3中,并将指针后移一位。
3. 如果L1或L2有一个已经遍历完了,将另一个链表剩余的节点依次插入L3中。
4. 返回L3的头节点即可。
具体实现代码如下:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p1 = l1, *p2 = l2, *p3 = NULL, *head = NULL;
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
if (l1->val <= l2->val) {
p3 = l1;
p1 = p1->next;
} else {
p3 = l2;
p2 = p2->next;
}
head = p3;
while (p1 && p2) {
if (p1->val <= p2->val) {
p3->next = p1;
p1 = p1->next;
} else {
p3->next = p2;
p2 = p2->next;
}
p3 = p3->next;
}
if (p1) p3->next = p1;
if (p2) p3->next = p2;
return head;
}
阅读全文