设A,B是两个带头结点的单链表,其中元素递增有序,设计一个算法从A和B中的公共元素产生单链表C,要求不破坏A,B的结点
不破坏A,B的结点,就是赋值操作,相当于重新创建了一个单链表
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void TailCreate(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; LNode *p,*r=L; int x; scanf("%d",&x); while(x!=999) { p=(LNode*)malloc(sizeof(LNode)); p->data=x; p->next=NULL; r->next=p; r=p; scanf("%d",&x); } } void displayList(LinkList L) { LNode *p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } } void Merge(LinkList A,LinkList B) { LinkList C=(LNode*)malloc(sizeof(LNode)); C->next=NULL; LNode *pc=C; LNode *pa=A->next,*pb=B->next; while(pa && pb) { if(pa->data<pb->data) pa=pa->next; else if(pa->data>pb->data) pb=pb->next; else if(pa->data==pb->data) { LNode *node=(LNode*)malloc(sizeof(LNode)); node->data=pa->data; node->next=NULL; pc->next=node; pc=node; pa=pa->next; pb=pb->next; } } displayList(C); } int main() { LinkList A,B; TailCreate(A); displayList(A); printf("\n"); TailCreate(B); displayList(B); printf("\n"); Merge(A,B); return 0; }
标签:LinkList,39,LNode,next,pb,pa,data,14 From: https://www.cnblogs.com/simpleset/p/17747386.html