39-18

有两个循环单链表,链表头指针分别指向A,B,将A,B连接起来,并保持循环。

没有说明是带头结点或不带头结点的循环链表,我使用的是不带头结点的循环单链表

不带头结点的循环单链表,在遍历时需要注意对最后一个结点的处理:

void displayList(LinkList L)
{
    LNode *p=L;
    do{
        printf("%d  ",p->data);
        p=p->next;
    }while(p!=L);
}
#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node *next;
}LNode,*LinkList;

void CreateList(LinkList &L)
{
    L=NULL;
    LNode *p;
    int x;
    scanf("%d",&x);
    while(x!=999)
    {
        LNode *node=(LNode*)malloc(sizeof(LNode));
        node->data=x;
        node->next=NULL;
        if(L==NULL)
        {
            L=(LinkList)malloc(sizeof(LNode));
            L=node;
            p=L;
        }    
        else
        {
            p->next=node;
            p=node;    
        }
        scanf("%d",&x);
    }    
    p->next=L;
}

void displayList(LinkList L)
{
    LNode *p=L;
    do{
        printf("%d  ",p->data);
        p=p->next;
    }while(p!=L);
}

void Merge(LinkList &A,LinkList &B)
{
    LNode *pa=A,*pb=B;
    while(pa->next!=A)
        pa=pa->next;
    while(pb->next!=B)
        pb=pb->next;
    pa->next=B;
    pb->next=A; 
}

int main()
{
    LinkList A,B;
    CreateList(A);
    displayList(A);
    printf("\n");
    CreateList(B);
    displayList(B);
    printf("\n");
    Merge(A,B);
    displayList(A);
    return 0;    
} 

 

posted on 2023-10-08 20:53  四马路弗洛伊德  阅读(16)  评论(0)    收藏  举报

导航