C语言归并两个递增单链表
时间: 2024-09-25 17:15:36 浏览: 54
在C语言中,合并两个递增排序的单链表可以采用迭代或递归的方式。这里我们先假设两个链表都是有序的,并且元素不会重复。
**迭代法**:
1. 定义一个新的头节点`newHead`用于存放合并后的链表,初始化为第一个链表的头节点。
2. 创建一个临时指针`temp`,初始指向`newHead`。
3. 分别用两个链表的头节点`p1`和`p2`作为循环条件,直到其中一个链表遍历完。
4. 比较`p1`和`p2`的值,将较小的那个节点的下一个节点赋给`temp`,然后移动对应链表的头节点向前。
5. 如果有一个链表遍历完了,那么将另一个链表剩余部分接到新的链表末尾。
6. 返回新的头节点`newHead`。
**伪代码示例**:
```c
Node* mergeLists(Node* p1, Node* p2) {
Node* newHead = (p1 && p1->val <= p2->val) ? p1 : p2;
Node* temp = newHead;
while ((p1 && p1->val <= p2->val) || (p2 && p2->val <= p1->val)) {
if (p1 && p1->val <= p2->val)
temp->next = p1, p1 = p1->next;
else
temp->next = p2, p2 = p2->next;
temp = temp->next;
}
// 将未遍历完的链表连接到新链表末尾
if (p1)
temp->next = p1;
else
temp->next = p2;
return newHead;
}
```
阅读全文