连接两个循环单链表(尾指针)
时间: 2023-08-29 17:12:15 浏览: 141
假设有两个循环单链表L1和L2,它们的尾指针分别为tail1和tail2,现在需要将它们连接成一个循环单链表L,其尾指针为tail。
1. 如果L1和L2都为空,直接返回空循环单链表。
2. 如果L1为空,将L2的尾指针赋值给L的尾指针tail,并返回L2。
3. 如果L2为空,将L1的尾指针赋值给L的尾指针tail,并返回L1。
4. 如果L1和L2都不为空,则需要将它们连接起来。首先将L1的尾指针tail1指向L2的头结点,即tail1->next = L2,然后将L2的尾指针tail2指向L1的头结点,即tail2->next = L1。最后将L的尾指针tail指向L2的尾结点,即tail = tail2。
代码实现如下:
```C++
// 定义循环单链表结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 连接两个循环单链表(尾指针)
ListNode* connectLists(ListNode* L1, ListNode* L2) {
if (!L1 && !L2) return NULL; // L1和L2都为空,返回空循环单链表
if (!L1) return L2; // L1为空,返回L2
if (!L2) return L1; // L2为空,返回L1
ListNode *tail1 = L1, *tail2 = L2;
while (tail1->next != L1) tail1 = tail1->next; // 找到L1的尾结点tail1
while (tail2->next != L2) tail2 = tail2->next; // 找到L2的尾结点tail2
tail1->next = L2; // 将L1的尾指针tail1指向L2的头结点
tail2->next = L1; // 将L2的尾指针tail2指向L1的头结点
ListNode *tail = tail2; // L的尾指针为L2的尾结点tail2
return L1;
}
```
阅读全文