将两个递增的有序链表合并为一个递增的有序链表代码
时间: 2024-03-25 15:31:17 浏览: 13
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
# 创建一个哨兵节点
dummy = ListNode(0)
# 创建一个指针指向哨兵节点
cur = dummy
# 遍历两个链表,比较大小,将较小的节点接到新链表中
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
# 将剩余的节点接到新链表的末尾
cur.next = l1 if l1 else l2
# 返回哨兵节点的下一个节点
return dummy.next
```
相关问题
将两个递增的有序链表合并为一个递增的有序链表
将两个递增有序链表合并为一个新的递增有序链表,可以使用递归或迭代的方法。递归的做法是,如果两个链表的头结点的值都不为空,则比较它们的大小,将较小的结点的下一个结点与另一个链表合并;如果其中一个链表的头结点为空,则将另一个链表直接返回。迭代的做法是,使用一个虚拟头结点,初始指向空,依次比较两个链表的头结点的大小,将较小的结点添加到虚拟头结点的后面,并将该结点的下一个结点设为新的头结点,直到两个链表都为空为止。
将两个递增的有序链表合并为一个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指向哑节点,然后比较两个链表当前节点的值,将较小值插入到新链表中。当其中一个链表为空时,将另一个链表的剩余部分插入到新链表中。最后返回新链表的头节点即可。