c语言合并有序单链表(新增结点)//单链表结点结构体 typedef struct node{ datatype data; struct node* next;}ListNode,*LinkList;
时间: 2024-05-11 08:18:46 浏览: 111
可以按照以下步骤合并两个有序单链表:
1. 定义一个指向新链表的指针 new_head,并将其初始化为 NULL。
2. 遍历两个有序单链表,比较每个链表中当前结点的值,将较小的值插入到新链表的尾部。
3. 如果其中一个链表已经遍历完了,将另一个链表的剩余部分直接插入到新链表尾部。
4. 返回新链表的头结点 new_head。
以下是 C 语言的代码实现:
```
LinkList merge(LinkList L1, LinkList L2) {
ListNode *p1 = L1, *p2 = L2, *new_head = NULL, *tail = NULL;
while (p1 != NULL && p2 != NULL) {
ListNode *new_node = (ListNode*)malloc(sizeof(ListNode)); // 新建结点
if (p1->data <= p2->data) { // 比较结点值
new_node->data = p1->data;
p1 = p1->next;
} else {
new_node->data = p2->data;
p2 = p2->next;
}
new_node->next = NULL;
if (new_head == NULL) { // 插入新结点
new_head = tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
if (p1 != NULL) {
if (new_head == NULL) {
new_head = p1;
} else {
tail->next = p1;
}
} else if (p2 != NULL) {
if (new_head == NULL) {
new_head = p2;
} else {
tail->next = p2;
}
}
return new_head;
}
```
注意,这里假设两个链表都是升序排列的。如果链表中含有重复元素,可以根据实际情况在比较结点值时进行适当的调整。
阅读全文