單鏈表的實現(具有取並集的功能)
阿新 • • 發佈:2019-02-08
簡答的連結串列實現,增加了求兩個連結串列的並集的功能
Code:
#include <stdio.h> #include <malloc.h> #include <string.h> typedef struct Node { int data; struct Node *pNext; }Node,*PNode; PNode create_list(void); void traverse_list(PNode pHead); PNode insert_list(PNode pHead,int pos,int val); PNode delete_list(PNode pHead,int pos); void hebin_list(PNode pHead1,PNode pHead2); int main() { PNode pHead1=NULL,pHead2=NULL; printf("生成第一條連結串列:\n"); pHead1=create_list(); insert_list(pHead1,3,4); insert_list(pHead1,3,7); delete_list(pHead1,7); traverse_list(pHead1); printf("生成第二條連結串列:\n"); pHead2=create_list(); traverse_list(pHead2); printf("將兩條連結串列合併:\n"); hebin_list(pHead1,pHead2); traverse_list(pHead2); return 0; } void hebin_list(PNode pHead1,PNode pHead2){ PNode p=pHead1->pNext; PNode q=pHead2->pNext; PNode s; while(p->pNext!=NULL){ while(q->pNext!=NULL){ if(p->pNext->data==q->pNext->data){ break; }else{ q=q->pNext; } } if(q->pNext==NULL) { s=(PNode)malloc(sizeof(Node)); s->data=p->pNext->data; s->pNext=NULL; q->pNext=s; //p->next=p->next->next; } p=p->pNext; q=pHead2->pNext; } } PNode create_list(void) { int len; int i; int val; PNode pHead=(PNode)malloc(sizeof(Node)); if(NULL==pHead) { printf("記憶體分配失敗.\n"); exit(-1); } PNode p=pHead; p->pNext=NULL; printf("請輸入您需要生成的結點數:len="); scanf("%d",&len); for(i=0;i<len;i++) { printf("請輸入您要儲存第%d的結點值",i+1); scanf("%d",&val); PNode pNew=(PNode)malloc(sizeof(Node)); if(NULL==pNew) { printf("分配失敗,終止!\n"); exit(-1); } pNew->data=val; p->pNext=pNew; pNew->pNext=NULL; p=pNew; } return pHead; } void traverse_list(PNode pHead) { PNode p=pHead->pNext; while(NULL!=p) { printf("%d ",p->data); p=p->pNext; } printf("\n"); return; } PNode insert_list(PNode pHead,int pos,int val) { int i=0; PNode p=pHead; while(p!=NULL&&i<pos-1) { p=p->pNext; i++; } if(i>pos-1||p==NULL) exit (-1); PNode pNew=(PNode)malloc(sizeof(Node)); if(NULL==pNew) { printf("動態記憶體分配失敗!\n"); exit(-1); } pNew->data=val; PNode q=p->pNext; p->pNext=pNew; pNew->pNext=q; } PNode delete_list(PNode pHead,int pos) { int i=0; PNode p=pHead; while(p->pNext!=NULL&&i<pos-1) { p=p->pNext; i++; } if(p->pNext==NULL||i>pos-1) exit (-1); PNode q=p->pNext; p->pNext=p->pNext->pNext; free(q); q=NULL; return ; }