设ha=(a1,a2,…,an)和 hb=(b1,b2,…,bm) 是两个带头结点的循环单链表。设计一个算法将这两个表合并为带头结点的循环单链表hc的代码
时间: 2023-05-29 16:08:05 浏览: 359
```
// 定义循环单链表结点结构体
struct Node {
int data;
Node* next;
Node(int x): data(x), next(nullptr) {}
};
// 合并两个循环单链表
Node* merge(Node* ha, Node* hb) {
if (ha == nullptr) return hb;
if (hb == nullptr) return ha;
Node* pa = ha->next;
Node* pb = hb->next;
Node* pc = new Node(0); // 新链表的头结点
Node* tail = pc; // 新链表的尾结点
while (pa != ha && pb != hb) {
if (pa->data <= pb->data) {
tail->next = pa;
pa = pa->next;
} else {
tail->next = pb;
pb = pb->next;
}
tail = tail->next;
}
// 将剩余结点接到新链表的尾部
if (pa != ha) tail->next = pa;
if (pb != hb) tail->next = pb;
// 设置新链表的头结点
pc->next = tail->next;
delete tail; // 释放尾结点
return pc;
}
// 将ha和hb合并为hc
Node* mergeLists(Node* ha, Node* hb) {
Node* hc = new Node(0); // 新链表的头结点
hc->next = merge(ha, hb);
return hc;
}
```
阅读全文