課題3(5/24出題)


課題


Exercise 3.4ヒント

Exercise 3.4 は "should not use any secondary data structures, and should not create any new nodes." という条件を満たす必要がありますが,report3.tgzの中に含まれるSLList.hの中からincludeされているex3_4.hは,

void reverse(){
  if (head == NULL) return;
  std::vector temp;
  Node* u = head;
  while (u != NULL){
    Node* next = u->next;
    temp.push_back(new Node(u->x));
    delete u;
    u = next;
  }
  for (size_t i = 0; i < temp.size() - 1; i++) {
    temp[i + 1]->next = temp[i];
  }
  head = temp[temp.size() - 1];
  tail = temp[0];
} //Ex3_4
のように,この条件を満たしていませんが(temp というsecondary data structureを使っている,new Nodeのところで,create new nodesを実行している),動くことは動きます.

動作チェックをおこなうプログラム check_ex3_4.cpp

g++ --std=c++11 -Wall -O2 -o check_ex3_4 check_ex3_4.cpp
でコンパイルし.
./check_ex3_3
で実行してOKが出ることで,このex3_4.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります. 

Exercise 3.7ヒント

report3.tgzの中に含まれるDLList.hの中からincludeされているex3_7.hは,

  bool isPalindrome() {
    std::vector v;
    Node *node = dummy.next;
    while (node != &dummy) {
        v.push_back(node->x);
        node = node->next;
    }
    return v == std::vector(v.rbegin(), v.rend());
}
のように,一度 vectorに変換してから,palindromeかどうかをチェックするプログラムで,これ自体も解の要件は満たしていますが,補助的なデータ構造を使わずに解答することを期待しています.

動作チェックをおこなうプログラム check_ex3_7.cpp

g++ --std=c++11 -Wall -O2 -o check_ex3_7 check_ex3_7.cpp
でコンパイルし.
./check_ex3_7
で実行してOKが出ることで,このex3_7.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります. 

Exercise 3.12ヒント

report3.tgzの中に含まれるDLList.hの中からincludeされているex3_12.hは,

  void reverse() {
    std::vector v;
    while (size() > 0) {
        v.push_back(remove(0));
    }
    for (T x : v) {
        add(0, x);
    }
}  
のように,一度 vectorに変換してから,逆順になるようにaddするプログラムで,これ自体も解の要件は満たしていますが,補助的なデータ構造を使わずに解答することを期待します.

動作チェックをおこなうプログラム check_ex3_12.cpp

g++ --std=c++11 -Wall -O2 -o check_ex3_12 check_ex3_12.cpp
でコンパイルし.
./check_ex3_12
で実行してOKが出ることで,このex3_12.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります. 

提出方法

作成したすべてのプログラムと,各プログラムに関する簡単な説明をまとめた プレインテキスト形式(テキストエディタで編集可能な形式), ipynb形式,またはPDF形式の ファイルを1つ作成して,ITC-LMSの「課題3(5/24出題)」(5/24の講義時間中に公開される予定)に提出してください.

締切は,6/12(日) 23:59です.締切を過ぎても2022年7月末までは6割を上限に採点します.


LeetCodeの関連問題


オプション課題

課題だけで物足りない人は,以下のオプション課題にも取り組んでください.