ノードの削除は単純じゃないのか

ノードを探索する関数を追加してみた。list.cursorが指してるノードを削除する関数も書こうと思って、あれれと思った。一方向の連結リストだと、直前のノードがたどれなくて*nextを書き変えられないじゃないか。なんだっけなと思ってテキストを見たら、*preというポインタを別途容易して頭から再度なめるという処理をしているようだった。なるほど。めんどくさい。

void SearchSize(List *list, int size) {
  if (list->head == NULL)
    return;
  else {
    Node *node;
    for (node = list->head; node != NULL; node = node->next) {
      if (node->data.size == size) {
	  list->cursor = node;
	  break;
      }
    }
  }
}