两个不带头结点的有序单链表LA和LB的合并,请合并到LA表中再输出,LB表的空间全部释放。C语言代码实现
时间: 2023-10-30 09:18:10 浏览: 228
严版课后习题重点算法.docx
假设LA和LB分别为两个有序的单链表:
```c
typedef struct node {
int data;
struct node *next;
} Node;
Node *mergeList(Node *LA, Node *LB) {
Node *p, *q, *tmp;
if (!LA) {
return LB;
}
if (!LB) {
return LA;
}
if (LA->data < LB->data) {
p = LA;
q = LB;
} else {
p = LB;
q = LA;
}
while (p->next && q) {
if (p->next->data < q->data) {
p = p->next;
} else {
tmp = q->next;
q->next = p->next;
p->next = q;
q = tmp;
p = p->next;
}
}
if (!p->next) {
p->next = q;
}
free(LB);
return LA;
}
```
主要思路是将两个链表进行比较,将较小值的节点插入到新链表中,直到其中一个链表为空。最后将非空的链表接到新链表的尾部。同时释放掉LB链表的空间。
阅读全文