連結リストの先頭要素の削除の仕方の質問です。
c
1struct LIST{ 2 int data; 3 struct LIST *next; 4}; 5 6int main() { 7 struct LIST *head, *new_r, *tail; 8 scanf("%d", &x); 9 new_r=(struct LIST *) malloc(sizeof(struct LIST)); 10 new_r->data = x; 11 new_r->next = NULL: head = new_r; tail = new_r; 12 while(scanf("%d", &x)){ 13 new_r=(struct LIST *) malloc(sizeof(struct LIST)); 14 new_r->data=x; 15 tail->next=new_r; new_r->next=NULL; tail=new_r; 16 } 17}
このような構造のとき、先頭の要素をとりだして削除するには
data = head -> data; head = (head -> next) -> next;
とすればよいとあるのですが、この書き方だとheadの位置が先頭から2番目の要素(headの次ではない)を指し示すように思えてしまいます。head = head -> next
にならない理由は何でしょうか?
細かい文法や、例外性などについては無視していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー