将两个非递减有序单链表合并成一个非递减有序单链表 c语言
时间: 2024-09-22 08:04:51 浏览: 59
数据结构实验
5星 · 资源好评率100%
在C语言中,将两个非递减有序的单链表合并成一个新的非递减有序链表,可以采用双指针法。步骤如下:
1. 定义一个头节点,它初始为空。
2. 创建两个指针,分别指向第一个列表和第二个列表的头部。
3. 比较两个指针所指向的元素,选择较小的那个添加到新链表中,并移动相应的指针。如果当前链表为空,则直接添加。
4. 当其中一个链表遍历完,将另一个链表剩余的部分依次添加到新链表的后面。
这是一个伪代码示例:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode)); // 新链表的头节点
dummy->next = NULL;
ListNode* tail = dummy; // 尾部指针
while (l1 && l2) { // 只要两个链表都不为空
if (l1->val <= l2->val) { // 如果l1的值小
tail->next = l1;
l1 = l1->next;
} else { // 否则,l2的值小
tail->next = l2;
l2 = l2->next;
}
tail = tail->next; // 更新尾部指针
}
// 将剩余的一个链表连接到结果链表尾部
if (l1)
tail->next = l1;
else
tail->next = l2;
return dummy->next; // 返回新的链表头节点
}
```
阅读全文