/// <summary> /// Add a node after a given node /// </summary> /// <param name="d">given node data</param> /// <param name="a">node data to be added</param> public void AddANodeAfterAGivenData(int d, int a) { DoublyLinkedListNodeSM doublyLinkedListNodeSM = null; DoublyLinkedListNodeSM nodeToAdd = new DoublyLinkedListNodeSM(a); DoublyLinkedListNodeSM dummyHead = Head; while (dummyHead != null) { if (dummyHead.Data == d) { break; } dummyHead = dummyHead.Next; } if (dummyHead == null) { Console.WriteLine("There is no node with the given data"); return; } nodeToAdd.Next = dummyHead.Next; nodeToAdd.Prev = dummyHead; dummyHead.Next.Prev = nodeToAdd; dummyHead.Next = nodeToAdd; }
/// <summary> /// Delete a given data node /// </summary> /// <param name="d">node data to be deleted</param> public void DeleteANodeSm(int d) { DoublyLinkedListNodeSM nodeToDelete = Head; while (nodeToDelete != null && nodeToDelete.Data != d) { nodeToDelete = nodeToDelete.Next; } if (nodeToDelete == null) { Console.WriteLine("The given data isn't part of doubly linked list"); return; } if (nodeToDelete.Prev != null) { nodeToDelete.Prev.Next = nodeToDelete.Next; Head = nodeToDelete.Next; } if (nodeToDelete.Next != null) { nodeToDelete.Next.Prev = nodeToDelete.Prev; Last = nodeToDelete.Prev; } nodeToDelete = null; }
internal void DeleteAllOccurencesOfGivenKey(int v) { DoublyLinkedListNodeSM temp = Head; while (temp != null) { if (temp.Data == v) { if (temp.Prev != null) { temp.Prev.Next = temp.Next; } else { Head = temp.Next; } if (temp.Next != null) { temp.Next.Prev = temp.Prev; } else { Last = temp.Prev; } } temp = temp.Next; } PrintDoublyLinkedListSm(); }
/// <summary> /// Find a pair with given sum in sorted dll /// </summary> /// <param name="sum">given sum</param> public void FindPairWithGivenSumInDll(int sum) { DoublyLinkedListNodeSM start = Head; DoublyLinkedListNodeSM end = Last; while (start != end) { if (start.Data + end.Data == sum) { Console.WriteLine($"The pair with sum {sum} is {start.Data}:{end.Data}"); break; } else if (start.Data + end.Data < sum) { start = start.Next; } else { end = end.Prev; } } if (start == end) { Console.WriteLine($"The given pair is not present"); } }
/// <summary> /// print the dll /// </summary> public void PrintDoublyLinkedListSm() { while (Head != null) { Console.WriteLine(Head.Data); Head = Head.Next; } }
/// <summary> /// add a node at the start /// </summary> /// <param name="data"></param> public void AddANodeAtFirstSm(int data) { DoublyLinkedListNodeSM doublyLinkedListNodeSM = new DoublyLinkedListNodeSM(data); if (Head == null) { Head = doublyLinkedListNodeSM; Last = doublyLinkedListNodeSM; return; } doublyLinkedListNodeSM.Next = Head; Head.Prev = doublyLinkedListNodeSM; Head = doublyLinkedListNodeSM; }
/// <summary> /// Add a node at the end /// </summary> /// <param name="data"></param> public void AddANodeInTheEndSm(int data) { DoublyLinkedListNodeSM doublyLinkedListNodeSM = new DoublyLinkedListNodeSM(data); if (Head == null) { Head = doublyLinkedListNodeSM; Last = doublyLinkedListNodeSM; return; } doublyLinkedListNodeSM.Prev = Last; Last.Next = doublyLinkedListNodeSM; Last = doublyLinkedListNodeSM; }
public DoublyLinkedListNodeSM ReverseTheDoublyLinkedListSm() { DoublyLinkedListNodeSM prev = null; DoublyLinkedListNodeSM current = Head; DoublyLinkedListNodeSM next = null; while (current != null) { next = current.Next; current.Next = prev; current.Prev = next; prev = current; current = next; } return(prev); }
public DoublyLinkedListSM() { Head = null; Last = null; }