DoublyLinkedList

Run Settings
LanguageC#
Language Version
Run Command
using System; using System.Collections.Generic; using System.Linq; class MainClass { static void Main() { Console.WriteLine("Hello World!"); var list = new DoublyLinkedList(4); list.Append(9); list.Prepend(1); list.Insert(5, 1); list.Insert(20, 3); list.PrettyPrint(); list.Remove(2); list.Remove(3); list.PrettyPrint(); } } public class DoublyLinkedList { public DoublyLinkedList(int value) { Head = new Node(value); Tail = Head; Length = 1; } public Node Head { get; set; } public Node Tail { get; set; } public int Length { get; set;} public void Insert(int value, int index) { if(index == 0) { Prepend(value); return; } if(index == Length) { Append(value); return; } if(index >= Length) { Console.WriteLine($"{index} out of bounds"); return; } Node leader = Head; //Get node before insert index: leader for(int k = 0; k < index - 1; k++) leader = leader.Next; //Save the current next since it's going to be overwritten Node after = leader.Next; Node newNode = new Node(value); //Save the old node.Next as next in the node being inserted newNode.Next = after; newNode.Previous = leader; after.Previous = newNode //Overwrite the leader.Next with the new node leader.Next = newNode; Length++; } public void Remove(int index) { Node leader = Head; for(int k = 0; k < index - 1; k++) leader = leader.Next; Node nodeToRemove = leader.Next; leader.Next = nodeToRemove.Next; Node newPreviousNode = nodeToRemove.Previous; Length--; } public void Append(int value) { var newNode = new Node(value); newNode.Previous = Tail; Tail.Next = newNode; Tail = newNode; Length++; } public void Prepend(int value) { Node newNode = new Node(value); Head.Previous = newNode; newNode.Next = Head; Head = newNode; Length++; } public void PrettyPrint() { if(Head == null) return; Node currentNode = Head; while(currentNode != null) { Console.Write(currentNode.Value + (currentNode.Next == null ? string.Empty : " ---> ")); currentNode = currentNode.Next; } Console.WriteLine(); } public class Node { public Node(int value) { Value = value; Next = null; Previous = null; } public int Value { get; set; } public Node Next { get; set; } public Node Previous { get; set; } } }
Editor Settings
Theme
Key bindings
Full width
Lines