internal void DeleteNodeByLine(DoubleLinkedList doubleLinkedList, uint lineNumber) { DynamicStringLinkNode temp_head = doubleLinkedList.head; //this is the head of linklist if (temp_head != null && lineNumber.Equals(1)) //remove first node { doubleLinkedList.head = temp_head.next; // Change first node to second node doubleLinkedList.head.prev = null; //Set new first node's pres to null index--; return; } lineNumber--; while (temp_head != null && lineNumber != 0) { lineNumber--; temp_head = temp_head.next; } if (temp_head == null) { return; } if (temp_head.next != null) // if current node has next value then set next node's pointer to one before current node. { temp_head.next.prev = temp_head.prev; } if (temp_head.prev != null) // if current node prev has value then set last node point to one after current node. { temp_head.prev.next = temp_head.next; } index--; }
//Dynamic lenght string node public DynamicStringLinkNode(string input) { memory = new StringBuilder(capacity); memory.Append(input); prev = null; next = null; }
internal DynamicStringLinkNode GetLastNode(DoubleLinkedList doubleLinkedList) { DynamicStringLinkNode temp = doubleLinkedList.head; while (temp.next != null) { temp = temp.next; } return(temp); }
internal void InsertFront(DoubleLinkedList doubleLinkedList, string data) { DynamicStringLinkNode newNode = new DynamicStringLinkNode(data); newNode.next = doubleLinkedList.head; newNode.prev = null; if (doubleLinkedList.head != null) { doubleLinkedList.head.prev = newNode; index++; } doubleLinkedList.head = newNode; }
internal void InsertLast(DoubleLinkedList doubleLinkedList, string data) { DynamicStringLinkNode new_Node = new DynamicStringLinkNode(data); if (doubleLinkedList.head == null) { new_Node.prev = null; doubleLinkedList.head = new_Node; index++; return; } DynamicStringLinkNode lastNode = GetLastNode(doubleLinkedList); lastNode.next = new_Node; new_Node.prev = lastNode; index++; }
internal void InsertAfter(DynamicStringLinkNode prev_node, string data) { if (prev_node == null) { Console.WriteLine("Error preoius node is nullT"); return; } DynamicStringLinkNode new_Node = new DynamicStringLinkNode(data); new_Node.next = prev_node.next; prev_node.next = new_Node; new_Node.prev = prev_node; if (new_Node.next != null) { new_Node.next.prev = new_Node; index++; } }
public void PrintList(DoubleLinkedList doubleLinkedList, uint line1, uint line2, int token) { if (line1.Equals(0) && line2.Equals(0) && token == 0) { DynamicStringLinkNode n = doubleLinkedList.head; int numberLine = 1; while (n != null) { Console.WriteLine(numberLine + " >> " + n.memory + " "); numberLine++; n = n.next; } numberLine = 1; } else if (token == 1) { DynamicStringLinkNode n = doubleLinkedList.head; uint numberLine = line1; uint tempIndex = line1 - 1; while (n != null && tempIndex != 0) //This while loop is use to locate line 1 { tempIndex--; n = n.next; // line1 loaction node, we will copy this node's tring to temp } for (int i = 0; i < (line2 - line1 + 1); i++) { Console.WriteLine(numberLine + " > " + n.memory + " $"); numberLine++; n = n.next; } } else if (token == 2) { DynamicStringLinkNode n = doubleLinkedList.head; uint numberLine = line1; uint tempIndex = line1 - 1; while (n != null && tempIndex != 0) //This while loop is use to locate line 1 { tempIndex--; n = n.next; // line 1 loaction node, we will copy this node's tring to temp } for (int i = 0; i < (line2 - line1 + 1); i++) { Console.WriteLine("> " + numberLine + "\t" + n.memory); numberLine++; n = n.next; } } else if (token == 3) { DynamicStringLinkNode n = doubleLinkedList.head; uint numberLine = line1; uint tempIndex = line1 - 1; while (n != null && tempIndex != 0) //This while loop is use to locate line 1 { tempIndex--; n = n.next; // line 1 loaction node, we will copy this node's tring to temp } for (int i = 0; i < (line2 - line1 + 1); i++) { Console.WriteLine("> " + n.memory); numberLine++; n = n.next; } } }