計算機プログラムの構造と解釈(SICP)学習メモ
蒋 いつ峰 2008/09/05   |  プログラミング基礎
第二章 練習2.17~2.23 2008/09/05  |  PK:SICP 練習 2.17~2.23

SICP練習2.17~2.23です。リストに関する練習です。


問題

練習2.17:リストの最後の項目を取得。
練習2.18
:リストを逆にする。
練習2.19:略
練習2.20:可変個数引数。
練習2.21~2.23:略


解答

練習2.17の解答

 
  1. /** 
  2.  * 練習2.17。 
  3.  * リストの最後の項目を取得。 
  4.  */  
  5. List lastPair(List l) {  
  6.     List curr = l;  
  7.     while (curr.next !is null) {  
  8.         curr = curr.next;  
  9.     }  
  10.     return curr;  
  11. }  

練習2.18の解答

 
  1. /** 
  2.  * 練習2.18。 
  3.  * リストを逆にする。 
  4.  */  
  5. List reserve(List l) {  
  6.     List pre = null;  
  7.     List curr = l;  
  8.     List head;  
  9.   
  10.     while (curr !is null) {  
  11.         head = new List();  
  12.         head.data = curr.data;  
  13.         head.next = pre;  
  14.         pre = head;  
  15.         curr = curr.next;  
  16.     }  
  17.     return head;  
  18. }  

練習2.20の解答

 
  1. /** 
  2.  * 練習2.20。 
  3.  * 可変個数引数。 
  4.  */  
  5. List sameParity(int[] ar ...) {  
  6.     int x0 = ar[0];  
  7.     int remainder = x0 % 2;  
  8.     List next;  
  9.     List curr;  
  10.     int x;  
  11.     for (int i = ar.length - 1; i > -1; i--) {  
  12.         x = ar[i];  
  13.         if ((x % 2) != remainder) {  
  14.             continue;  
  15.         }  
  16.         curr = new List();  
  17.         curr.data = x;  
  18.         curr.next = next;  
  19.         next = curr;  
  20.     }  
  21.     return curr;  
  22. }  

閲覧  |  コメント  |  目次

 
ヘルプ  |  ご利用規約  |  相互リンク  |  問合せ
リンクはご自由に、問合せはお気軽に
©2007 Uprush