ISinglyLinkedNode <T> ReverseList(ISinglyLinkedNode <T> Prev, ISinglyLinkedNode <T> Current) { ISinglyLinkedNode <T> next = Current.Next; Current.Next = Prev; return((next == null) ? Current : ReverseList(Current, next)); }
void ISinglyLinkedList <T> .RemoveHead() { lock (_head) { lock (_head.Next) { _head = _head.Next; } } }
void PrintNode(ISinglyLinkedNode <T> Node) { if (Node == null) { Debug.Write(" | " + "NULL" + " | " + "\n"); return; } Debug.Write(" | " + Node.Data + " | " + "-->"); PrintNode(Node.Next); }
ISinglyLinkedNode <T> ISinglyLinkedList <T> .GetAt(int Index) { if (Index < 0) { return(new SinglyLinkedNode <T>()); } ISinglyLinkedNode <T> Temp = _head; for (int i = 0; i < Index - 1; i++) { Temp = Temp.Next; } return(Temp); }
void ISinglyLinkedList <T> .Remove(ISinglyLinkedNode <T> Node) { //empty linked list if (_head == null) { return; } for (ISinglyLinkedNode <T> current = _head, prev = null; current != null; prev = current, current = current.Next) { if (current.Data.CompareTo(Node.Data) == 0) { prev.Next = current.Next; break; } } }
void ISinglyLinkedList <T> .ReverseList() { // < __ < __ < __ __: reversedPart: head // (__)__ __ __ //head : current: > > > ISinglyLinkedNode <T> reversedPart = null; ISinglyLinkedNode <T> current = _head; while (current != null) { ISinglyLinkedNode <T> next = current.Next; current.Next = reversedPart; reversedPart = current; current = next; } _head = reversedPart; }
public void SinglyLinkedListTest() { ISinglyLinkedList <int> singlylinkedlist = new SinglyLinkedList <int>(); IPrintLinkedList printlist; printlist = singlylinkedlist as IPrintLinkedList; ISinglyLinkedNode <int> nodeone = new SinglyLinkedNode <int>(1); ISinglyLinkedNode <int> nodetwo = new SinglyLinkedNode <int>(2); ISinglyLinkedNode <int> nodethree = new SinglyLinkedNode <int>(3); ISinglyLinkedNode <int> nodefour = new SinglyLinkedNode <int>(4); printlist.PrintLinkedList(); singlylinkedlist.AddHead(nodeone); singlylinkedlist.AddHead(nodetwo); singlylinkedlist.AddHead(nodethree); singlylinkedlist.AddHead(nodefour); printlist.PrintLinkedList(); ISinglyLinkedNode <int> temp = singlylinkedlist.GetAt(2); singlylinkedlist.RemoveAt(2); //singlylinkedlist.RemoveAfter(temp); //singlylinkedlist.Remove(temp); printlist.PrintLinkedList(); //singlylinkedlist.RemoveHead(); //printlist.PrintLinkedList(); //singlylinkedlist.RemoveBefore(nodetwo); singlylinkedlist.ReverseList(); printlist.PrintLinkedList(); }
void ISinglyLinkedList <T> .RemoveTail() { ISinglyLinkedNode <T> currentnode = _head; //check if there is only one node. Remove head then if (_head.Next == null) { _head = null; return; } //if there are only two nodes set heads next to null to remove tail if (_head.Next != null && _head.Next.Next == null) { _head.Next = null; return; } for (ISinglyLinkedNode <T> current = _head, child = current.Next, grandchild = child.Next; current != null; current = current.Next) { } }
void ISinglyLinkedList <T> .RemoveBefore(ISinglyLinkedNode <T> Node) { //cannot remove before head if (object.Equals(Node.Data, _head.Data)) { return; } //if we need to remove the node before tail then make head and tail the same if (Node.Data.CompareTo(_tail.Data) == 0) { _head = _tail; (_tail as IDisposable).Dispose(); } for (ISinglyLinkedNode <T> currentnode = _head, child = null, grandchild = null; currentnode != null; currentnode = currentnode.Next) { child = currentnode.Next; grandchild = child.Next; if (Node.Data.CompareTo(grandchild.Data) == 0) { currentnode.Next = grandchild; break; } } }
void ISinglyLinkedList <T> .InsertBefore(ISinglyLinkedNode <T> Node, T Data) { throw new NotImplementedException(); }
public SinglyLinkedList() { _head = null; _tail = null; }
void ISinglyLinkedList <T> .Add(ISinglyLinkedNode <T> Data) { (this as ISinglyLinkedList <T>).AddHead(Data); }
public RecursiveSinglyLinkedList() { Root = new SentinelNode <T>(); }
public SinglyLinkedNode() { _data = default(T); _next = null; }
void ISinglyLinkedList <T> .AddAt(int Index, ISinglyLinkedNode <T> Data) { throw new NotImplementedException(); }
void ISinglyLinkedList <T> .AddTail(ISinglyLinkedNode <T> Data) { _tail.Next = Data; _tail = Data; }
void ISinglyLinkedList <T> .AddHead(ISinglyLinkedNode <T> Data) { Data.Next = _head; _head = Data; }
public SinglyLinkedNode(T data) { _data = data; _next = null; }
void ISinglyLinkedList <T> .RemoveAfter(ISinglyLinkedNode <T> Node) { Node.Next = Node.Next.Next; }