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



我只想知道这两种符号之间是否有区别:

第一个例子:

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在void insert(node*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,因为它没有定义。

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;

以下内容将不起作用:列表->next被声明为NULL,因为一开始它不指向任何元素,所以显而易见的答案是:

last = list;

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

相关内容

  • 没有找到相关文章

最新更新