C++链表表示法,有什么区别?

C++ linked list notation, what is the difference?

我只想知道这两种写法有没有区别:

第一个例子:

    struct node{
      int data;
      node* next;
   };
    void insert(node* list){
      node* n,* last;
      last = list;
      while(last)
         last = last -> next;
      n = new node;
      last = n;
      n -> next = NULL;
      cin >> n -> data;
   }
    int main(){
      node* list = new node;
      list -> next = NULL;
      insert(list);
      return 0;
    }

第二个例子:

    struct node{
      int data;
      node* next;
   };
    void insert(node* list){
      node* n,* last;
      last = list -> next;
      while(last)
         last = last -> next;
      n = new node;
      last = n;
      n -> next = NULL;
      cin >> n -> data;
   }
    int main(){
      node* list = new node;
      list -> next = NULL;
      insert(list);
      return 0;
    }

所以我想知道符号谎言之间是否有区别: 在第一个例子中:

last = list;

在第二个例子中

last = lista -> next;

什么是 node* list do/represent in void insert(node* list){} 那只是一个指向任何列表的指针,一个指向主列表的指针,还是什么?

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

void insert(node* list){
  node* n,* last;
  last = list;
  while(last -> next)
     last = last -> next;
  n = new node;
  last = n;
  n -> next = NULL;
  cin >> n -> data;
}

int main(){
  node* list = new node;
  list -> next = NULL;
  insert(list);
  return 0;
}

嗯,显然没有人愿意给我答案,所以我自己找到了。这就是编码的样子。 原因:

last = list -> next;

以下是行不通的:list -> next 被声明为 NULL 因为在开始时它没有指向任何元素所以显而易见的答案是:

last = list;

因为列表包含指向下一个元素的头部地址

你上面的解释是正确的,但我还要补充一点,假设你的

list = NULL;

void insert(node* list){
  node* n,* last;
  last = list -> next;
  while(last)
     last = last -> next;
  n = new node;
  last = n;
  n -> next = NULL;
  cin >> n -> data;

}

然后在上述情况下,您试图访问 'NULL' 的下一个 list->next,因此它会给您运行时错误,因为您无法访问 nullptr 的下一个,因为它未定义。