将两个递增的单链表合并成一个递增的单链表的代码
时间: 2023-08-31 07:26:09 浏览: 113
将两个有序链表合并一个链表
4星 · 用户满意度95%
### 回答1:
将两个递增的单链表合并成一个递增的单链表可以使用以下代码: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if (l1 == nullptr) {
return l2;
}
if (l2 == nullptr) {
return l1;
}
ListNode *head = nullptr, *tail = nullptr;
while (l1 && l2) {
if (l1->val <= l2->val) {
if (head == nullptr) {
head = tail = l1;
} else {
tail->next = l1;
tail = l1;
}
l1 = l1->next;
} else {
if (head == nullptr) {
head = tail = l2;
} else {
tail->next = l2;
tail = l2;
}
l2 = l2->next;
}
}
if (l1) {
tail->next = l1;
}
if (l2) {
tail->next = l2;
}
return head;
}
### 回答2:
下面是用Python编写的将两个递增的单链表合并成一个递增的单链表的代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
dummy = ListNode()
curr = dummy
while l1 and l2:
if l1.val <= l2.val:
curr.next = l1
l1 = l1.next
else:
curr.next = l2
l2 = l2.next
curr = curr.next
if l1:
curr.next = l1
if l2:
curr.next = l2
return dummy.next
```
以上代码定义了一个`ListNode`类来表示链表节点,其中`val`存储节点的值,`next`存储指向下一个节点的指针。
`mergeTwoLists`函数接受两个链表头节点`l1`和`l2`作为输入,并返回合并后的链表头节点。
首先判断输入的两个链表是否为空,若其中一个链表为空,则直接返回另一个链表。
创建一个dummy节点用于构建合并后的链表,用`curr`指针指向dummy节点。
然后循环比较`l1`和`l2`节点的值,将较小的节点加入到合并链表中,并将对应的指针向后移动。直到其中一个链表遍历完。
最后,将剩余的未遍历完的链表接到合并链表的末尾。
返回dummy节点的下一个节点,即为合并后的链表头节点。
注:此代码假设输入的单链表已经按照递增顺序排列。
### 回答3:
题目要求将两个递增的单链表合并成一个递增的单链表,我们可以借助一个新的辅助链表来实现这个功能。
具体步骤如下:
1. 定义一个新的链表head,作为结果链表的头节点。
2. 定义两个指针p1和p2,分别指向两个原始链表的头节点。
3. 比较p1和p2节点的值,将较小的节点加入到结果链表head中,并将指针后移一位。
4. 重复步骤3,直到p1或p2为空。
5. 将p1或p2剩余部分中的节点加入到结果链表head中。
6. 返回结果链表head。
以下是代码实现:
```
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
# 定义结果链表的头节点
head = ListNode(0)
# 定义指针p,用于扫描结果链表
p = head
# 如果l1和l2都不为空
while l1 and l2:
# 比较l1和l2当前节点的值
if l1.val < l2.val:
p.next = l1
l1 = l1.next
else:
p.next = l2
l2 = l2.next
p = p.next
# 如果l1或l2有剩余节点
if l1:
p.next = l1
if l2:
p.next = l2
# 返回结果链表的头节点的下一个节点
return head.next
```
以上代码实现了将两个递增的单链表合并成一个递增的单链表的功能。
阅读全文