合并两个有序双向链表C语言
时间: 2024-11-13 19:25:21 浏览: 36
合并两个有序的双向链表(Doubly Linked List)在C语言中可以使用迭代或递归的方式来实现。这里我们提供一种常见的迭代方法:
首先,我们需要定义一个结构体来表示链表节点,包含数据域、指向前驱节点的指针prev和指向后继节点的指针next。
```c
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
```
然后,我们可以创建一个函数mergeLists,该函数接受两个头结点作为参数,并返回合并后的头结点:
```c
Node* mergeLists(Node* head1, Node* head2) {
Node* mergedHead = NULL; // 结果链表头结点初始化为空
Node* current = NULL; // 当前遍历的指针
// 比较两个链表的头部节点,将较小的添加到结果链表
if (head1 && head2) {
if (head1->data <= head2->data) {
mergedHead = head1;
current = head1;
} else {
mergedHead = head2;
current = head2;
}
} else if (head1) {
mergedHead = head1;
current = head1;
} else if (head2) {
mergedHead = head2;
current = head2;
}
// 遍历两个链表,不断合并较小的数据
while (current->next && current->next->next) {
if (current->next->data <= current->next->next->data) {
current = current->next;
} else {
current->next = current->next->next;
current = current->next->prev;
}
}
// 如果其中一个链表还有剩余元素,将其加到结果链表末尾
if (current->next) {
current->next->prev = mergedHead;
current = current->next;
}
return mergedHead;
}
```
阅读全文