两个有序链表的合并思路
时间: 2024-11-30 22:22:38 浏览: 10
合并两个有序链表通常是通过迭代或递归的方式来完成的。这里我会介绍一种常见的迭代方法:
**迭代法:**
1. **创建一个新的头节点**:这是合并后链表的起点,初始时指向原来的第一个元素。
2. **遍历两个链表**:同时检查当前节点(从新链表开始)和两个输入链表的头节点。
3. **比较当前节点**:如果新链表的节点值小于或等于第一个输入链表的节点值,则将第一个链表的节点链接到新链表;否则,将第二个链表的节点链接到新链表。
4. **移动指针**:根据刚才的选择,分别移动相应的链表头节点(如果选择的是第一个链表的节点,就移到下一个;如果是第二个,也一样)。
5. **重复步骤2-4**,直到其中一个链表结束。这时,剩下的另一个链表就是结果的一部分,将其连接到新链表的末尾即可。
6. **返回新的链表头节点**:这将是合并后的有序链表的头。
**伪代码示例:**
```c
Node* mergeSortedLists(Node* list1, Node* list2) {
Node* result = (list1 && list1->value <= list2->value) ? list1 : list2;
Node* current = result;
while (list1 && list2) {
if (list1->value <= list2->value) {
current->next = list1;
list1 = list1->next;
} else {
current->next = list2;
list2 = list2->next;
}
current = current->next;
}
// 如果还有剩余的链表,直接添加到结果后面
if (list1)
current->next = list1;
else if (list2)
current->next = list2;
return result;
}
```
阅读全文