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; }