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. 反向函数中以 struct 开头的行是什么?他们是扩展原始结构还是创建原始结构指向的新结构?我真的不明白为什么原始结构没有名称
  2. struct node *next;和之间有区别 struct node* next; 吗?
4

2 回答 2

1

@willys 是对的。众所周知,struts 是一组相似和不相似的数据类型。创建结构时,它会分配一块内存。并且该内存有一个地址。

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

上面的这个结构分配了一块内存。在此块内存储了 3 个不同的数据(年龄、名称和结构地址node

当你想存储更多块(用于存储更多数据)时,你需要分配更多的结构。但是,当所有结构都分配在内存中时,它们之间没有任何关系。这是一个原因内存泄漏。

因此,在分配的每个内存块上保留地址字段,以便任何内存块都可以存储其最近块的地址。

它是 Linked List 的真正风味值。因此,结构的名称不会混淆。

于 2012-08-21T09:11:25.970 回答
1
  1. 行是“指向结构节点的指针”类型struct node *prev的变量的声明。prev这些行只是声明了一些局部变量。prev包含指向最后处理节点current的指针,包含指向当前处理节点next的指针,用于保存指向原始列表的下一个节点的指针。

  2. struct node *next和之间没有区别struct node* next

于 2012-08-21T08:40:35.233 回答