0
#include<stdio.h>
#include<stdlib.h>

/* Link list node */
struct node
{
    int data;
    struct node *next;
};

/* Function to reverse the linked list */
static void reverse(struct node** head_ref)
{
    struct node *prev   = NULL;
    struct node *current = *head_ref;
    struct node *next;
    while (current != NULL)
    {
        next  = current->next; 
        current->next = prev;  
        prev = current;
        current = next;
    }
    *head_ref = prev;
}
  1. 逆関数の構造体で始まる行は何を担当していますか?元の構造体を拡張しますか、それとも元の構造体が指す新しい構造体を作成しますか?元の構造体に名前がない理由がよくわかりません
  2. との間に違いは struct node *next;ありstruct node* next; ますか?
4

2 に答える 2

1
  1. 行は、 「構造体ノードへのポインタ」タイプstruct node *prevの変数の宣言です。prevこれらの行は、いくつかのローカル変数を宣言しているだけです。prev最後に処理されたノードへのcurrentポインタを含み、現在処理中のノードへのポインタを含み、next元のリストの次のノードへのポインタを保存するために使用されます。

  2. struct node *nextとの間に違いはありませんstruct node* next

于 2012-08-21T08:40:35.233 に答える
1

@willysは正しいです。ストラットは類似および非類似のデータ型のグループであることがわかっているため、構造体が作成されると、メモリのブロックが割り当てられます。そのメモリにはアドレスがあります。

struct node{
    int age;
    char name[20];
    struct node *next_address; //Address of its type (self referential structure)
}

上記の構造体は、メモリのブロックを割り当てます。このブロック内には、3つの異なるデータが格納されています(年齢、名前、構造のアドレスnode

より多くのブロックを格納したい場合(より多くのデータを格納するため)、より多くの構造体を割り当てる必要がありますが、すべての構造体がメモリに割り当てられている場合、それらは相互に関係がないという問題があります。メモリーリーク。

したがって、割り当てられたメモリの各ブロックにアドレスフィールドを保持して、メモリの任意のブロックが最も近いブロックのアドレスを格納できるようにします。

その、リンクリストの本当のフレーバー値です。したがって、構造体の名前について混乱することはありません。

于 2012-08-21T09:11:25.970 に答える