I'm looking for some feedback regarding my implementation of a generic singly-linked list in C#. I'm also looking for some tips on how to implement other techniques such as using IEnumerable
or other .NET interfaces I'm currently not aware of.
Node.cs
using System;
namespace SinglyLinkedLists
{
public class Node<T>
{
private Node<T> _next;
private T _data;
public Node<T> next{
get { return _next; }
set { _next = value; }
}
public T data{
get { return _data; }
set { _data = value; }
}
public Node(T newData){
this._data = newData;
this._next = null;
}
public static void printNodes(Node<T> head){
Node<T> currentNode = head;
while (currentNode != null){
Console.WriteLine(currentNode.data);
currentNode = currentNode.next;
}
}
}
}
SinglyLinkedLists.cs
using System;
namespace SinglyLinkedLists
{
public class SinglyLinkedLists<T>
{
private Node<T> head;
private Node<T> previous;
private Node<T> current;
private Node<T> tail;
private int numberOfNodes = 0;
public SinglyLinkedLists()
{
head = null;
previous = null;
current = null;
tail = null;
}
public void PrintList(){
Node<T> current = head;
while (current != null){
Console.WriteLine(current.data);
current = current.next;
}
}
public void AddLast(T data){
Node<T> newNode = new Node<T>(data);
if (tail == null){
head = tail = newNode;
}
else{
tail.next = newNode;
tail = newNode;
}
numberOfNodes++;
}
public void AddLastTwo(T data){
Node<T> newNode = new Node<T>(data);
if (head == null){
head = newNode;
}
else{
current = head;
while (current.next != null){
current = current.next;
}
current.next = newNode;
}
numberOfNodes++;
}
public void RemoveNode(T data){
Node<T> nodeToRemove = new Node<T>(data);
current = head;
if(head.data.Equals(nodeToRemove.data)){
current = head.next;
head = current;
}
else{
while (current != null){
if (current.data.Equals(nodeToRemove.data)) {
previous.next = current.next;
current = previous;
}
else{
previous = current;
current = current.next;
}
}
}
numberOfNodes--;
}
public int ListSize(){
return numberOfNodes;
}
public bool InList(T data){
Node<T> nodeToLookFor = new Node<T>(data);
Node<T> current = head;
while (current != null){
if (current.data.Equals(nodeToLookFor.data)){
return true;
}
current = current.next;
}
return false;
}
}
}
IEnumerable
why don't you add it yourself? \$\endgroup\$