单循环链表的合并
- 设两个单循环链表A和B(都带头结点,设A和B都非空),合并A和B的思路是:
- 将A最后一个结点的指针域指向B的第一个结点(即指向头结点后的那个结点,首元结点),然后将B的最后一个元素的指针域指向A的头结点,释放B的头结点。
- 算法:
- 1.获取A的最后一个结点,设为p1;
- 2.获取B的最后一个结点,设为p2;
- 3.令p1的指针域指向B的第一个结点,p1->next=B(头)->next;
- 4.令p2的指针域指向A的头结点,p2->next=A(头)。
void Combine(LinkList L1, LinkList L2)
{
LNode *p1;
LNode *p2;
p1 = L1->next;
p2 = L2->next;
LNode *s1;
LNode *s2;
while (p1 != L1)
{
if (p1->next == L1)
{
s1 = p1; // s1指向表L1的最后一个结点
break;
}
p1 = p1->next; // 指针后移
}
while (p2 != L2)
{
if (p2->next == L2)
{
s2 = p2;//s2指向表L2的最后一个结点
break;
}
p2 = p2->next;//指针后移
}
s1->next = L2->next; // L1尾部接到L