No, new is the C++ way of doing things*. It calls the constructor of an object and will correctly initialize its state, no matter how complex. malloc simply allocates raw memory, and the caller must know what else needs to be done initialize the object.
*even better would be to avoid the use of new or malloc in the first place in C++. But for a learning exercise like a linked list, using new is fine imo.
(node*)malloc(sizeof(node)) initializes memory for both data and link within struct. Why is onlyaddress of new allocated memory inserted in node* temp not int data ?
malloc(sizeof(node)) allocates sizeof(node) bytes. It does not initialize anything. I'm not sure what your second sentence means.
I should be more specific, calling Node* node = new Node; here also would not initialize data and link to any particular value. If you had a constructor like node() : data(0), link(nullptr) { }, then both data and link would be initialized to 0/nullptr, respectively, when you call new.
The (node*) part is a cast to interpret the pointer as pointing to a node object, as opposed to just being a generic address, pointing to something of unknown size (which you can't dereference). It doesn't change the data itself.