举个例子将两个递增的有序链表合并为一个递增的有序链表
时间: 2023-02-28 16:52:14 浏览: 74
可以使用归并排序的思想,递归地将两个链表分成两半,直到每一个链表只剩下一个元素,然后两两比较,将较小的元素插入到新的链表中,最后将所有的元素合并成一个有序链表。
举个例子:
假设有两个递增的有序链表:
```
1 -> 3 -> 5
2 -> 4 -> 6
```
合并后得到:
```
1 -> 2 -> 3 -> 4 -> 5 -> 6
```
相关问题
将两个递增的有序链表合并为一个递增的有序链表
将两个递增有序链表合并为一个新的递增有序链表,可以使用递归或迭代的方法。递归的做法是,如果两个链表的头结点的值都不为空,则比较它们的大小,将较小的结点的下一个结点与另一个链表合并;如果其中一个链表的头结点为空,则将另一个链表直接返回。迭代的做法是,使用一个虚拟头结点,初始指向空,依次比较两个链表的头结点的大小,将较小的结点添加到虚拟头结点的后面,并将该结点的下一个结点设为新的头结点,直到两个链表都为空为止。
将两个递增的有序链表合并为一个C语言
下面是一个C语言实现将两个递增的有序链表合并为一个的函数:
```c
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
// 创建哑节点,方便操作
struct ListNode dummy;
dummy.val = 0;
dummy.next = NULL;
// 定义指针p指向哑节点
struct ListNode *p = &dummy;
// 两个链表都不为空时,比较两个链表当前节点的值,将较小值插入到新链表中
while(l1 != NULL && l2 != NULL){
if(l1->val < l2->val){
p->next = l1;
l1 = l1->next;
}else{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
// 如果l1链表还有剩余,则将剩余部分插入到新链表中
if(l1 != NULL){
p->next = l1;
}
// 如果l2链表还有剩余,则将剩余部分插入到新链表中
if(l2 != NULL){
p->next = l2;
}
return dummy.next;
}
```
该函数先创建一个哑节点,方便操作,定义指针p指向哑节点,然后比较两个链表当前节点的值,将较小值插入到新链表中。当其中一个链表为空时,将另一个链表的剩余部分插入到新链表中。最后返回新链表的头节点即可。