2016-03-20 8 views
0
1 struct node 
2 { 
3  int data; 
4  struct node *next; 
5 }*head; 
6 
7 void append(int num) 
8 { 
9  struct node *temp,*right; 
10 temp= (struct node *)malloc(sizeof(struct node)); 
11 temp->data=num; 
12 right=(struct node *)head; 
13 while(right->next != NULL) 
14  right=right->next; 
15 right->next =temp; 
16 right=temp; 
17 right->next=NULL; 
18 } 

このコードの特定の部分を理解する助けが必要です。リンクされたリストの理解の構文

1)コードは何をすべきですか?

2)5行目は何をしていますか?

}*head; 

私は私の構造体を作るときイムは、これを見慣れて:

struct node 
{ 
    int data; 
    struct node *next; 
}; 

3)行うことになってライン12は何ですか?この構文がわからない

right=(struct node *)head; 

私の推測では、頭が何を指しているのか、正しいことを指していると思います。ですから、どうしてですか?right = head;

ありがとう!

+0

Fyi、*このコードのキャストは*どちらも*必要ありません。私は絶えず混乱している。人々がコードに不必要な塊を入れる傾向があるからだ。うまく動作するコードを書くのは難しいです。不必要なくそでそれを散らしても、それは良くなりません。 – WhozCraig

+0

アーメン、それに:D – Hyune

+0

そして、私はこれを行うには、それは[これ** **この**](http://pastebin.com/FL6wrF9Z)のようになります。いろいろな人のための違ったストロークだと思います。 – WhozCraig

答えて

0

}*head;に関しては、これはすぐに構造体の頭部を宣言するだけです。頭部という名前のインスタンスは、それ自体がstructインスタンスへのポインタです。その後、1231行目でright = (struct node *)headでポインタがキャストされています。おそらく、これは安全性または明快さのためです。よく分かりません。

0

5行目は、前に宣言したstruct型へのポインタであるグローバル変数headを宣言します。

12行目はheadからrightに割り当てられます。キャストは必要ありません。

この関数は新しいノードを割り当て、dataメンバにnumの値を与え、リストの最後に移動して追加します。

15 right->next =temp; 
16 right=temp; 
17 right->next=NULL; 

15行目は新しいノードを追加します。変数rightが利用可能になり、tempが割り当てられます。 16行目で、リストの最後のメンバのnextメンバをnullに設定するようになりました。これらの最後の2行は単にtemp->next= NULL;と書くことができます。

+0

ありがとうポール、それは理にかなっています。 – Hyune

+0

私は13〜14行目から、リンクされたリストの最後に到達しようとしていることを理解していますが、15〜17行目のポイントは何ですか? 私は最初にtempを右→次に追加した後、右にtempを追加してからright-> next = NULLにする理由を理解していません。 行15は冗長なので削除できませんか? – Hyune

+0

申し訳ありませんが、nvm私はそれを取得します。 15行目、リストの末尾にtempを追加します 16行目はテンポラリを右にします 17行目はtempがnullを指しているものにします – Hyune

関連する問題