鏈表的相關算法及應用(三)
阿新 • • 發佈:2018-07-24
klist pri 去除 lse mon 原來 null code ...
問題六 :將兩個單鏈表的相同的值,組成一個新的鏈表
問題七 :遞增輸出單鏈表 並釋放節點
問題八 :將一個帶頭結點的單鏈表A 分解為兩個帶頭結點的單鏈表A和B使A中保存原來序號為奇數的元素,B中保存原來序號為偶數的元素
問題九 :將C={a1,b1,a2,b2,...,an,bn},拆分為 A={a1,a2,...,an} B={b1,b2,...,bn};
問題十 :去除遞增有序鏈表中的重復元素
//問題六 將兩個單鏈表的相同的值,組成一個新的鏈表 LinkList common(LinkList L1,LinkList L2){ LNode *t1=L1->next,*t2=L2->next;bool yes = 0; LNode *h = (LNode*)malloc(sizeof(LNode)); h->next=NULL; while(t1){ yes=0; t2=L2->next; while(t2){ if(t1->data==t2->data){ yes=1; break; } t2=t2->next; } if(yes){ LNode *node = (LNode*)malloc(sizeof(LNode)); node->data=t1->data; node->next=h->next; h->next = node; } t1=t1->next; } return h; }
//問題七 遞增輸出單鏈表 並釋放節點 void min_del(LinkList &L){ LNode *pre=L,*p=L->next,*t; while(L->next!=NULL){ pre=L; p=L->next; while(p->next!=NULL){ if(p->next->data<pre->next->data){ pre=p; } p=p->next; } t=pre->next; printf("%d ",t->data); pre->next=t->next; free(t); } free(L); }
//問題八 將一個帶頭結點的單鏈表A 分解為兩個帶頭結點的單鏈表A和B // 使A中保存原來序號為奇數的元素,B中保存原來序號為偶數的元素 LinkList disCreate(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(LNode)); B->next=NULL; LNode *a=A,*b=B; LNode *r,*p=A->next; int index = 1; while(p!=NULL){ if(index%2){ a->next=p; a=p; }else{ b->next=p; b=p; } index++; p=p->next; } a->next=NULL; b->next=NULL; return B; }
//問題九 將C={a1,b1,a2,b2,...,an,bn},拆分為 A={a1,a2,...,an} B={b1,b2,...,bn}; LinkList disCreate2(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(LNode)); B->next=NULL; LNode *r,*a=A; int index = 1; LNode *p = A->next; while(p!=NULL){ r=p->next; if(index%2){ a->next=p; a=p; }else{ p->next=B->next; B->next=p; } p=r; index++; } a->next=NULL; return B; }
//問題十 去除遞增有序鏈表中的重復元素 void moveRepeat(LinkList &L){ LNode *pre=L,*p=L->next; while(p!=NULL){ if(p->next!=NULL){ if(p->data!=p->next->data){ pre->next=p; pre=p; } }else{ pre->next=p; pre=p; } p=p->next; } pre->next=NULL; }
鏈表的相關算法及應用(三)