已知L1和L2为两个带有头结点的单链表,L1的各个数据递增排列,L2的各个数据也递增排列。这两个链表已经建立,两个单链表中的数据各不相同,请编写程序通过归并的方法将这两个单链表合并为一个单链表,要求合并后的单链表数据递增排列。数据结构(c语言版)
时间: 2024-10-21 17:12:12 浏览: 27
在C语言中,你可以通过创建一个新的节点,并依次比较两个链表的当前节点值,选择较小的一个添加到新链表中,然后移动指向较小节点的那个链表的指针。这个过程会一直持续到其中一个链表遍历完。最后,将剩余未遍历完的链表添加到新链表的尾部。以下是简单的伪代码示例:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
// 创建新的头节点
ListNode* head = new ListNode(0);
ListNode* tail = head;
// 比较并合并链表
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
// 如果有一个链表还有剩余元素,将其添加到尾部
if (l1 != NULL) tail->next = l1;
else tail->next = l2;
// 返回合并后的链表头节点
return head->next;
}
```
阅读全文