这是c ++中链表的代码: -
#include<iostream>
using namespace std;
class node{
public:
int data;
node *next;
};
void insertdata(int element ,node *head){
node *newnode = new node();
newnode -> data = element;
newnode -> next = NULL;
node *itr;
itr=head;
if(head == NULL)
head = newnode;
else{
while(itr->next != NULL){
itr = itr-> next;
}
itr->next = newnode;
}
}
void print(node *head){
node *print = head;
while(print != NULL){
cout<<print->data<<"\n";
print = print -> next;
}
}
int main(){
node *head = NULL;
insertdata(10,head);
insertdata(20,head);
insertdata(30,head);
print(head);
return 0;
}
如果我将head声明为全局对象,那么它工作正常。我必须在全球范围内宣布它的原因是什么。我是第二年B.Tech学生第一次学习它所以它看起来很混乱。
答案 0 :(得分:0)
在C ++中,函数的参数是按值传递,因此修改被调用者中的参数不会影响调用者的局部变量。
引用可用于修改调用者的本地变量。
class func fromJSON(json: JSON) -> Artwork? {
guard let model = ArtworkModel(json: json) else { return nil }
return Artwork(artworkModel: model)
}
答案 1 :(得分:0)
对于初学者,不需要使用类密钥类声明节点。用类键结构声明它更自然。例如
struct node
{
int data;
node *next;
};
对于函数insertdata
,函数参数是其局部变量。任何局部变量的更改都不会影响用作参数的原始对象。
因此,您应该将第二个参数声明为node *
的引用,例如
void insertdata( int element, node * &head );
或指向node *
void insertdata( int element, node **head );
在第一种情况下,函数定义可能看起来像
void insertdata( int element, node * &head )
{
node *newnode = new node { element, nullptr };
if ( head == nullptr )
{
head = newnode;
}
else
{
node *itr = head;
while ( itr->next != nullptr ) itr = itr->next;
itr->next = newnode;
}
}
在第二种情况下,函数定义可能看起来像
void insertdata( int element, node **head )
{
while ( *head ) head = &( *head )->next;
*head = new node { element, nullptr };
}
考虑到通常在单链接列表的开头插入新节点。
当第一个参数引用列表的头部时,它也会更好。
这是一个基于使用第二个函数定义的演示程序。
#include <iostream>
struct node
{
int data;
node *next;
};
void insertdata( node **head, int element )
{
while ( *head ) head = &( *head )->next;
*head = new node { element, nullptr };
}
std::ostream & print( node *head, std::ostream &os = std::cout )
{
for ( node *current = head; current != nullptr; current = current->next )
{
os << current->data << ' ';
}
return os;
}
int main()
{
node *head = nullptr;
for ( int x : { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } ) insertdata( &head, x );
print( head ) << std::endl;
}
它的输出是
1 2 3 4 5 6 7 8 9 10