浙大版《C語言程式設計(第3版)》題目集 - 習題11-7 奇數值結點連結串列(20 分)
阿新 • • 發佈:2019-01-01
題目連結:點選開啟連結
題目大意:略。
解題思路:題目說刪除了,其實可以轉化為再搞一個獲取奇數時的做法來做偶數的情況,最後把地址賦值給L,這樣思路就簡單許多~。還有這裡帶兩個星號的L,其實多了一個星號是因為傳參時,傳進去的是指標變數的地址(此地址非內容)。
AC 程式碼
struct ListNode *readlist() { struct ListNode *h, *p, *pre; int da, fst=1; while(~scanf("%d", &da) && da!=-1) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p->data=da; if(!fst) pre->next=p, pre->next->next=NULL, pre=pre->next; if(fst) pre=h=p, fst=0; } return h; } struct ListNode *getodd( struct ListNode **L ) { struct ListNode *p, *pre1, *pre2, *h1=NULL, *h2=NULL; int f1=1, f2=1, da; while(*L) { da=(*L)->data; if(da%2) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p->data=da; if(!f1) pre1->next=p, pre1->next->next=NULL, pre1=pre1->next; if(f1) pre1=h1=p, f1=0; } else { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p->data=da; if(!f2) pre2->next=p, pre2->next->next=NULL, pre2=pre2->next; if(f2) pre2=h2=p, f2=0; } *L=(*L)->next; } *L=h2; return h1; }