王道P38T14
主代码:
LinkList common_subList(LinkList &A,LinkList &B){ LNode *C=new LNode,*pC=C; C->next=NULL; LNode* pA=A->next,*pB=B->next; while(pA!=NULL && pB!=NULL){ if(pA->data < pB->data){ pA=pA->next; }else if(pA->data == pB->data){ pC->next=new LNode; pC->next->data=pA->data; pC=pC->next; pC->next=NULL; pA=pA->next; pB=pB->next; }else{ pB=pB->next; } } return C; }
完整代码:
#include <cstdio> #include <stdlib.h> using namespace std; typedef struct LNode{ int data; struct LNode* next=NULL; LNode(){ } LNode(int x){ data=x; } }LNode; typedef LNode* LinkList; LinkList build_list(int * arr,int n){ int i; LinkList L=new LNode; LinkList pre=L; for(i=0;i<n;i++){ LinkList p=new LNode(arr[i]); pre->next=p; pre=p; } return L; } void show_list(LinkList& L){ LinkList p=L->next; while(p){ printf("%d ",p->data); p=p->next; } puts(""); } LinkList common_subList(LinkList &A,LinkList &B){ LNode *C=new LNode,*pC=C; C->next=NULL; LNode* pA=A->next,*pB=B->next; while(pA!=NULL && pB!=NULL){ if(pA->data < pB->data){ pA=pA->next; }else if(pA->data == pB->data){ pC->next=new LNode; pC->next->data=pA->data; pC=pC->next; pC->next=NULL; pA=pA->next; pB=pB->next; }else{ pB=pB->next; } } return C; } int main(){ int A_arr[5]={1,2,3,5,9}; int B_arr[5]={0,2,2,6,9}; LinkList A=build_list(A_arr,5); LinkList B=build_list(B_arr,5); LinkList C=common_subList(A,B); show_list(A); show_list(B); show_list(C); }
注意:
要注意紫色代码处的pC指针滑动。在白纸上编写时我忽略了这步。