public void RemoveStart() { if (Head != null) { Head = Head.next; } }
public void ReadAll() { RNode <T> curr = Head; while (curr != null) { Console.WriteLine(curr.data + " : " + curr.rand.data); curr = curr.next; } }
//Insert in the begining public void AddStart(T data) { RNode <T> newNode = new RNode <T>(); newNode.data = data; newNode.next = Head; Head = newNode; newNode.rand = GetRandomNode(); }
public void SetRandomNodes() { RNode <T> curr = Head; while (curr != null) { curr.rand = GetRandomNode(); curr = curr.next; Thread.Sleep(1000); } }
//Clone a linked list with Random Ptr public static RNode <T> CloneRandomPtrList(RNode <T> Head) { if (Head != null) { RNode <T> curr = Head; while (curr != null) { RNode <T> temp = new RNode <T>(); temp.data = curr.data; temp.next = curr.next; curr.next = temp; curr = curr = temp.next; } curr = Head; while (curr != null) { curr.next.rand = curr.rand.next; curr = curr.next.next; } curr = Head; RNode <T> copy = Head.next; RNode <T> temp1 = copy; while (curr != null) { if (curr.next != null) { curr.next = curr.next.next; } if (temp1.next != null) { temp1.next = temp1.next.next; } curr = curr.next; temp1 = temp1.next; } return(copy); } return(null); }
public void RemoveEnd() { if (Head != null) { RNode <T> curr = Head; if (curr.next == null) { Head = null; return; } while (curr.next.next != null) { curr = curr.next; } curr.next = null; } }
public void AddEnd(T data) { RNode <T> newNode = new RNode <T>(); newNode.data = data; if (Head == null) { Head = newNode; } else { RNode <T> curr = Head; while (curr.next != null) { curr = curr.next; } curr.next = newNode; } newNode.rand = GetRandomNode(); }
private RNode <T> GetRandomNode() { int length = 0; RNode <T> curr = Head; while (curr != null) { curr = curr.next; length++; } Random obj = new Random(); int randomNodeNumber = obj.Next(length); curr = Head; for (int i = 0; i < randomNodeNumber; i++) { curr = curr.next; } return(curr); }