C++ LinkedList - Prod Level ReadyLinkedList in C++Printing out a binary tree level by levelOptimising LinkedList class - Part 2LinkedList with Node implementationMake LinkedList in C++ more cleanDeleting node from LinkedListSingle LinkedList using smart pointersC++ LinkedList ImplementationProtected Pointer: a unique_ptr wrapper that auto encrypts and decrypts data in memoryGeneric binary search tree in C++
Examples of transfinite towers
Professor being mistaken for a grad student
Do I need to be arrogant to get ahead?
Why is the President allowed to veto a cancellation of emergency powers?
Tikz picture of two mathematical functions
My adviser wants to be the first author
Happy pi day, everyone!
What is the adequate fee for a reveal operation?
Bach's Toccata and Fugue in D minor breaks the "no parallel octaves" rule?
Why does energy conservation give me the wrong answer in this inelastic collision problem?
How to explain that I do not want to visit a country due to personal safety concern?
Why one should not leave fingerprints on bulbs and plugs?
PTIJ: Who should I vote for? (21st Knesset Edition)
Are Roman Catholic priests ever addressed as pastor
Math equation in non italic font
What is a ^ b and (a & b) << 1?
Python if-else code style for reduced code for rounding floats
Is it true that good novels will automatically sell themselves on Amazon (and so on) and there is no need for one to waste time promoting?
Bacteria contamination inside a thermos bottle
ERC721: How to get the owned tokens of an address
The German vowel “a” changes to the English “i”
How could an airship be repaired midflight?
How do I hide Chekhov's Gun?
Adventure Game (text based) in C++
C++ LinkedList - Prod Level Ready
LinkedList in C++Printing out a binary tree level by levelOptimising LinkedList class - Part 2LinkedList with Node implementationMake LinkedList in C++ more cleanDeleting node from LinkedListSingle LinkedList using smart pointersC++ LinkedList ImplementationProtected Pointer: a unique_ptr wrapper that auto encrypts and decrypts data in memoryGeneric binary search tree in C++
$begingroup$
I have been trying to craft a LinkedList class that should be close to production grade, so please be as critical as possible. I'm hoping you guys can help provide tips and point out mistakes I have made so I can improve on it.
I've deleted the copy/move constructors in an attempt to simplify as I'm not quite ready to consider that level of complexity yet.
The idea is that I could use it similar to this:
LinkedList ll;
ll.insert(42);
ll.insert(55);
ll.print();
ll.reversePrint();
ll.reverseIterative();
ll.reverseRecursive();
ll.printNthFromEnd(1);
Thank you in advance for your help.
LinkedList.h
class ListNode
public:
int data;
ListNode* next;
ListNode(int data);
~ListNode();
ListNode(const ListNode& copy) = delete;
ListNode(ListNode&& copy) = delete;
ListNode& operator=(ListNode copy) = delete;
;
class LinkedList
public:
ListNode* root = nullptr;
LinkedList() = default;
~LinkedList();
LinkedList(const LinkedList& copy) = delete;
LinkedList(LinkedList&& copy) = delete;
LinkedList& operator=(LinkedList copy) = delete;
void insert(int data);
bool isEmpty();
void print();
void reversePrint();
void reversePrintUtil(ListNode* current);
void reverseIterative();
void reverseRecursive();
void reverseRecursiveUtil(ListNode* current);
void printNthFromEnd(int n);
;
ListNode::ListNode(int data)
: data(data)
ListNode::~ListNode()
delete next;
LinkedList::~LinkedList()
delete root;
void LinkedList::insert(int data)
if (root == nullptr)
root = new ListNode(data);
return;
ListNode* temp = root;
while (temp->next)
temp = temp->next;
temp->next = new ListNode(data);
void LinkedList::print()
ListNode* temp = root;
while (temp)
std::cout << temp << 'n';
temp = temp->next;
void LinkedList::reversePrint()
if (root == nullptr) return;
reversePrintUtil(root);
void LinkedList::reversePrintUtil(ListNode* current)
if (current == nullptr) return;
reversePrintUtil(current->next);
std::cout << current->data << 'n';
void LinkedList::reverseIterative()
ListNode* prev = nullptr;
ListNode* current = root;
ListNode* next = nullptr;
while (current)
next = current->next;
current->next = prev;
prev = current;
current = next;
root = prev;
void LinkedList::reverseRecursive()
if (root == nullptr) return;
reverseRecursiveUtil(root);
void LinkedList::reverseRecursiveUtil(ListNode* current)
if (current->next == nullptr)
root = current;
return;
reverseRecursiveUtil(current->next);
current->next->next = current;
current->next = nullptr;
void LinkedList::printNthFromEnd(int n)
if (root == nullptr) return;
ListNode* normal = root;
ListNode* checker = root;
int i;
while (i < n)
checker = checker->next;
++i;
while (checker->next)
normal = normal->next;
checker = checker->next;
std::cout << normal->data << 'n';
bool LinkedList::isEmpty()
return root == nullptr;
c++
New contributor
$endgroup$
add a comment |
$begingroup$
I have been trying to craft a LinkedList class that should be close to production grade, so please be as critical as possible. I'm hoping you guys can help provide tips and point out mistakes I have made so I can improve on it.
I've deleted the copy/move constructors in an attempt to simplify as I'm not quite ready to consider that level of complexity yet.
The idea is that I could use it similar to this:
LinkedList ll;
ll.insert(42);
ll.insert(55);
ll.print();
ll.reversePrint();
ll.reverseIterative();
ll.reverseRecursive();
ll.printNthFromEnd(1);
Thank you in advance for your help.
LinkedList.h
class ListNode
public:
int data;
ListNode* next;
ListNode(int data);
~ListNode();
ListNode(const ListNode& copy) = delete;
ListNode(ListNode&& copy) = delete;
ListNode& operator=(ListNode copy) = delete;
;
class LinkedList
public:
ListNode* root = nullptr;
LinkedList() = default;
~LinkedList();
LinkedList(const LinkedList& copy) = delete;
LinkedList(LinkedList&& copy) = delete;
LinkedList& operator=(LinkedList copy) = delete;
void insert(int data);
bool isEmpty();
void print();
void reversePrint();
void reversePrintUtil(ListNode* current);
void reverseIterative();
void reverseRecursive();
void reverseRecursiveUtil(ListNode* current);
void printNthFromEnd(int n);
;
ListNode::ListNode(int data)
: data(data)
ListNode::~ListNode()
delete next;
LinkedList::~LinkedList()
delete root;
void LinkedList::insert(int data)
if (root == nullptr)
root = new ListNode(data);
return;
ListNode* temp = root;
while (temp->next)
temp = temp->next;
temp->next = new ListNode(data);
void LinkedList::print()
ListNode* temp = root;
while (temp)
std::cout << temp << 'n';
temp = temp->next;
void LinkedList::reversePrint()
if (root == nullptr) return;
reversePrintUtil(root);
void LinkedList::reversePrintUtil(ListNode* current)
if (current == nullptr) return;
reversePrintUtil(current->next);
std::cout << current->data << 'n';
void LinkedList::reverseIterative()
ListNode* prev = nullptr;
ListNode* current = root;
ListNode* next = nullptr;
while (current)
next = current->next;
current->next = prev;
prev = current;
current = next;
root = prev;
void LinkedList::reverseRecursive()
if (root == nullptr) return;
reverseRecursiveUtil(root);
void LinkedList::reverseRecursiveUtil(ListNode* current)
if (current->next == nullptr)
root = current;
return;
reverseRecursiveUtil(current->next);
current->next->next = current;
current->next = nullptr;
void LinkedList::printNthFromEnd(int n)
if (root == nullptr) return;
ListNode* normal = root;
ListNode* checker = root;
int i;
while (i < n)
checker = checker->next;
++i;
while (checker->next)
normal = normal->next;
checker = checker->next;
std::cout << normal->data << 'n';
bool LinkedList::isEmpty()
return root == nullptr;
c++
New contributor
$endgroup$
add a comment |
$begingroup$
I have been trying to craft a LinkedList class that should be close to production grade, so please be as critical as possible. I'm hoping you guys can help provide tips and point out mistakes I have made so I can improve on it.
I've deleted the copy/move constructors in an attempt to simplify as I'm not quite ready to consider that level of complexity yet.
The idea is that I could use it similar to this:
LinkedList ll;
ll.insert(42);
ll.insert(55);
ll.print();
ll.reversePrint();
ll.reverseIterative();
ll.reverseRecursive();
ll.printNthFromEnd(1);
Thank you in advance for your help.
LinkedList.h
class ListNode
public:
int data;
ListNode* next;
ListNode(int data);
~ListNode();
ListNode(const ListNode& copy) = delete;
ListNode(ListNode&& copy) = delete;
ListNode& operator=(ListNode copy) = delete;
;
class LinkedList
public:
ListNode* root = nullptr;
LinkedList() = default;
~LinkedList();
LinkedList(const LinkedList& copy) = delete;
LinkedList(LinkedList&& copy) = delete;
LinkedList& operator=(LinkedList copy) = delete;
void insert(int data);
bool isEmpty();
void print();
void reversePrint();
void reversePrintUtil(ListNode* current);
void reverseIterative();
void reverseRecursive();
void reverseRecursiveUtil(ListNode* current);
void printNthFromEnd(int n);
;
ListNode::ListNode(int data)
: data(data)
ListNode::~ListNode()
delete next;
LinkedList::~LinkedList()
delete root;
void LinkedList::insert(int data)
if (root == nullptr)
root = new ListNode(data);
return;
ListNode* temp = root;
while (temp->next)
temp = temp->next;
temp->next = new ListNode(data);
void LinkedList::print()
ListNode* temp = root;
while (temp)
std::cout << temp << 'n';
temp = temp->next;
void LinkedList::reversePrint()
if (root == nullptr) return;
reversePrintUtil(root);
void LinkedList::reversePrintUtil(ListNode* current)
if (current == nullptr) return;
reversePrintUtil(current->next);
std::cout << current->data << 'n';
void LinkedList::reverseIterative()
ListNode* prev = nullptr;
ListNode* current = root;
ListNode* next = nullptr;
while (current)
next = current->next;
current->next = prev;
prev = current;
current = next;
root = prev;
void LinkedList::reverseRecursive()
if (root == nullptr) return;
reverseRecursiveUtil(root);
void LinkedList::reverseRecursiveUtil(ListNode* current)
if (current->next == nullptr)
root = current;
return;
reverseRecursiveUtil(current->next);
current->next->next = current;
current->next = nullptr;
void LinkedList::printNthFromEnd(int n)
if (root == nullptr) return;
ListNode* normal = root;
ListNode* checker = root;
int i;
while (i < n)
checker = checker->next;
++i;
while (checker->next)
normal = normal->next;
checker = checker->next;
std::cout << normal->data << 'n';
bool LinkedList::isEmpty()
return root == nullptr;
c++
New contributor
$endgroup$
I have been trying to craft a LinkedList class that should be close to production grade, so please be as critical as possible. I'm hoping you guys can help provide tips and point out mistakes I have made so I can improve on it.
I've deleted the copy/move constructors in an attempt to simplify as I'm not quite ready to consider that level of complexity yet.
The idea is that I could use it similar to this:
LinkedList ll;
ll.insert(42);
ll.insert(55);
ll.print();
ll.reversePrint();
ll.reverseIterative();
ll.reverseRecursive();
ll.printNthFromEnd(1);
Thank you in advance for your help.
LinkedList.h
class ListNode
public:
int data;
ListNode* next;
ListNode(int data);
~ListNode();
ListNode(const ListNode& copy) = delete;
ListNode(ListNode&& copy) = delete;
ListNode& operator=(ListNode copy) = delete;
;
class LinkedList
public:
ListNode* root = nullptr;
LinkedList() = default;
~LinkedList();
LinkedList(const LinkedList& copy) = delete;
LinkedList(LinkedList&& copy) = delete;
LinkedList& operator=(LinkedList copy) = delete;
void insert(int data);
bool isEmpty();
void print();
void reversePrint();
void reversePrintUtil(ListNode* current);
void reverseIterative();
void reverseRecursive();
void reverseRecursiveUtil(ListNode* current);
void printNthFromEnd(int n);
;
ListNode::ListNode(int data)
: data(data)
ListNode::~ListNode()
delete next;
LinkedList::~LinkedList()
delete root;
void LinkedList::insert(int data)
if (root == nullptr)
root = new ListNode(data);
return;
ListNode* temp = root;
while (temp->next)
temp = temp->next;
temp->next = new ListNode(data);
void LinkedList::print()
ListNode* temp = root;
while (temp)
std::cout << temp << 'n';
temp = temp->next;
void LinkedList::reversePrint()
if (root == nullptr) return;
reversePrintUtil(root);
void LinkedList::reversePrintUtil(ListNode* current)
if (current == nullptr) return;
reversePrintUtil(current->next);
std::cout << current->data << 'n';
void LinkedList::reverseIterative()
ListNode* prev = nullptr;
ListNode* current = root;
ListNode* next = nullptr;
while (current)
next = current->next;
current->next = prev;
prev = current;
current = next;
root = prev;
void LinkedList::reverseRecursive()
if (root == nullptr) return;
reverseRecursiveUtil(root);
void LinkedList::reverseRecursiveUtil(ListNode* current)
if (current->next == nullptr)
root = current;
return;
reverseRecursiveUtil(current->next);
current->next->next = current;
current->next = nullptr;
void LinkedList::printNthFromEnd(int n)
if (root == nullptr) return;
ListNode* normal = root;
ListNode* checker = root;
int i;
while (i < n)
checker = checker->next;
++i;
while (checker->next)
normal = normal->next;
checker = checker->next;
std::cout << normal->data << 'n';
bool LinkedList::isEmpty()
return root == nullptr;
c++
c++
New contributor
New contributor
New contributor
asked 1 min ago
Ivaylo KirovIvaylo Kirov
1
1
New contributor
New contributor
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Ivaylo Kirov is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215585%2fc-linkedlist-prod-level-ready%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Ivaylo Kirov is a new contributor. Be nice, and check out our Code of Conduct.
Ivaylo Kirov is a new contributor. Be nice, and check out our Code of Conduct.
Ivaylo Kirov is a new contributor. Be nice, and check out our Code of Conduct.
Ivaylo Kirov is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215585%2fc-linkedlist-prod-level-ready%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown