設計演算法將一個帶頭結點的單鏈表A分解為兩個具有相同結構的連結串列B和C,其中B表的結點為A表中值小於零的結點,而C表的結點為A表中值大於零的結點(連結串列A中的元素為非零整數,要求B、C表利用A表的結點)。
阿新 • • 發佈:2018-10-31
語言:C++
#include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //建立連結串列 int CreateList(LinkList &L,int n) { LNode *p,*r;int i; L=new LNode; L->next=NULL; r=L; for(i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=NULL;r->next=p; r=p; } return 0; } //輸出連結串列 void display(LinkList L) { LNode *p; p=L->next; cout<<"("; while(p) {cout<<p->data<<" "; p=p->next;} cout<<")"<<endl; } //拆分 int SplitList_L(LinkList &LA,LinkList &LB,LinkList &LC) { LNode *pa;LNode *pb;LNode *pc; pa=LA->next;pb=LB;pc=LC; while(pa) { if(pa->data<0) { pb->next=pa; pa=pa->next; pb=pb->next; pb->next=NULL; } else { pc->next=pa; pa=pa->next; pc=pc->next; pc->next=NULL; } } } int main() { LinkList LA;LinkList LB;LinkList LC;int n;; cout<<"請輸入需要建立單鏈表A的長度:"<<endl; cin>>n; cout<<"請依次輸入需要存入的資料(尾插法&&非零):"<<endl; CreateList (LA,n); cout<<"單鏈表A為:"; display(LA); LB=new LNode;LC=new LNode; LB->next=NULL;LC->next=NULL; SplitList_L(LA,LB,LC); cout<<"分解後單鏈表B為:"; display(LB); cout<<"分解後單鏈表C為:"; display(LC); return 0; }