解決!
@asmさんの回答どおりfor(){};としてif(){}文全体を外に出したらうまくいきました。
ありがとうございました。
C++
1 void delete_find(unsigned long long &key) 2 { 3 Node *node; 4 for (node = top->next; node != top && node->key != key; node = node->next) 5 { 6 }; 7 8 if (node != top && node->key == key) 9 { 10 node->prev->next = node->next; 11 node->next->prev = node->prev; 12 delete node; 13 } 14 } 15
AOJの問題:ALDS1_3_C:双方向連結リスト
###知りたいこと
delete_findメソッド(要素の削除)のどこが間違っているのか知りたいです。
動的メモリ操作の実装は初めてなので初歩的なミスかもしれません。
アドバイスなどご教示頂けると助かります。
###現状
上記問題のヒントや公開されている解答を参考(ほぼ写経)に自作リストを作りました。
初期化と挿入とリスト出力と先頭削除と末尾削除は出来ましたが、
delete_findメソッドの削除だけ正常動作出来ていないようです。
###サンプルコード
C++
1#include <bits/stdc++.h> 2 3struct MyList 4{ 5 struct Node 6 { 7 unsigned long long key; 8 struct Node *next, *prev; 9 }; 10 11 Node *top; 12 13 MyList() 14 { 15 this->init(); 16 } 17 18 void init() 19 { 20 top = new Node; 21 top->next = top->prev = top; 22 } 23 24 void print_list() 25 { 26 for (Node *node = top->next; node != top; node = node->next) 27 { 28 if (node != top->next) 29 { 30 std::cout << ' '; 31 } 32 std::cout << node->key; 33 } 34 std::cout << std::endl; 35 } 36 37 void insert(unsigned long long &key) 38 { 39 Node *node = new Node; 40 node->key = key; 41 node->next = top->next; 42 top->next->prev = node; 43 top->next = node; 44 node->prev = top; 45 } 46 47 void delete_find(unsigned long long &key) 48 { 49 Node *node; 50 for (node = top->next; node != top && node->key != key; node = node->next) 51 { 52 if (node != top && node->key == key) 53 { 54 node->prev->next = node->next; 55 node->next->prev = node->prev; 56 delete node; 57 } 58 } 59 } 60 61 void delete_first() 62 { 63 Node *node = top->next; 64 top->next = top->next->next; 65 top->next->prev = top; 66 delete node; 67 } 68 void delete_last() 69 { 70 Node *node = top->prev; 71 top->prev = top->prev->prev; 72 top->prev->next = top; 73 delete node; 74 } 75}; 76 77void alds1_3_3() 78{ 79 unsigned long long n, v; 80 MyList mylist; 81 std::string str; 82 83 std::cin >> n; 84 for (int i = 0; i < n; ++i) 85 { 86 std::cin >> str; 87 if (str == "insert") 88 { 89 std::cin >> v; 90 mylist.insert(v); 91 } 92 else if (str == "delete") 93 { 94 std::cin >> v; 95 mylist.delete_find(v); 96 } 97 else if (str == "deleteFirst") 98 { 99 mylist.delete_first(); 100 } 101 else 102 { 103 mylist.delete_last(); 104 } 105 } 106 mylist.print_list(); 107} 108 109int main() 110{ 111 alds1_3_3(); 112 getchar(); 113 return 0; 114} 115
入力
9 insert 5 insert 2 insert 3 insert 1 delete 3 insert 6 delete 5 deleteFirst deleteLast
期待する出力
1
※現状の間違った出力
1 3 2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/05 10:15 編集