Я решал вопросы из связанного списка на хакерранке. Вопрос был прост: вставьте узел в начало связанного списка. Мне только нужно было реализовать функцию для вставки узла в начало связанного списка. Класс связанных списков и другие необходимые функции уже определены. Вот уже приведенный код:
#include <bits/stdc++.h>
using namespace std;
class SinglyLinkedListNode {
public:
int data;
SinglyLinkedListNode * next;
SinglyLinkedListNode(int node_data) {
this - > data = node_data;
this - > next = nullptr;
}
};
class SinglyLinkedList {
public:
SinglyLinkedListNode * head;
SinglyLinkedListNode * tail;
SinglyLinkedList() {
this - > head = nullptr;
this - > tail = nullptr;
}
};
void print_singly_linked_list(SinglyLinkedListNode * node, string sep, ofstream & fout) {
while (node) {
fout << node - > data;
node = node - > next;
if (node) {
fout << sep;
}
}
}
void free_singly_linked_list(SinglyLinkedListNode * node) {
while (node) {
SinglyLinkedListNode * temp = node;
node = node - > next;
free(temp);
}
}
// Complete the insertNodeAtHead function below.
/*
* For your reference:
*
* SinglyLinkedListNode {
* int data;
* SinglyLinkedListNode* next;
* };
*
*/
SinglyLinkedListNode * insertNodeAtHead(SinglyLinkedListNode * head, int data) {
}
У меня есть две реализации этой функции: Первая ...
SinglyLinkedListNode * insertNodeAtHead(SinglyLinkedListNode * head, int data) {
SinglyLinkedListNode node(data);
node.next = head;
head = &node;
return head;
}
Вторая ....
SinglyLinkedListNode * insertNodeAtHead(SinglyLinkedListNode * head, int data) {
SinglyLinkedListNode * ptr = new SinglyLinkedListNode(data);
ptr - > next = head;
head = ptr;
return head;
}
Второй работает, но первый дает ошибку во время выполнения. Что происходит?