链接列表C ++节点

时间:2016-02-27 13:14:34

标签: c++ linked-list

这是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学生第一次学习它所以它看起来很混乱。

2 个答案:

答案 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