Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace List
- {
- class LinkedList<T>
- {
- #region [Private members]
- private class Node<T>
- {
- public Node(T key)
- {
- Key = key;
- Prev = null;
- Next = null;
- }
- public T Key { get; set; }
- public Node<T> Prev { get; set; }
- public Node<T> Next { get; set; }
- }
- private Node<T> root;
- private int count;
- private Node<T> At(int index)
- {
- if (index < 0 || index >= Count)
- return null;
- var node = root;
- for (int i = 0; i < index; ++i)
- node = node.Next;
- return node;
- }
- #endregion
- #region [Public members]
- public LinkedList()
- {
- root = null;
- }
- public void Clear()
- {
- root = null;
- count = 0;
- }
- public int Count
- {
- get { return count; }
- }
- public bool Contains(T key)
- {
- for (var x = root; x != null; x = x.Next)
- if (x.Key.Equals(key))
- return true;
- return false;
- }
- public void Insert(T key, int index)
- {
- var node = new Node<T>(key);
- var prev = At(index - 1);
- if (prev == null)
- {
- node.Next = root;
- root = node;
- ++count;
- return;
- }
- var next = prev.Next;
- if (prev != null)
- {
- prev.Next = node;
- node.Prev = prev;
- }
- if (next != null)
- {
- next.Prev = node;
- node.Next = next;
- }
- ++count;
- }
- public void Add(T key)
- {
- Insert(key, Count);
- }
- public void RemoveAt(int index)
- {
- var node = At(index);
- if (node == null)
- return;
- var prev = node.Prev;
- var next = node.Next;
- if (prev != null)
- prev.Next = next;
- if (next != null)
- next.Prev = prev;
- if (root == node)
- root = next;
- --count;
- }
- public void Remove(T key)
- {
- int index = IndexOf(key);
- RemoveAt(index);
- }
- public T this[int index]
- {
- get
- {
- return At(index).Key;
- }
- set
- {
- At(index).Key = value;
- }
- }
- public int IndexOf(T key)
- {
- int index = 0;
- for (var node = root; node != null; node = node.Next)
- {
- if (node.Key.Equals(key))
- break;
- ++index;
- }
- return index;
- }
- #endregion
- }
- class Program
- {
- static void Main(string[] args)
- {
- LinkedList<int> list = new LinkedList<int>();
- list.Add(5);
- list.Add(6);
- list.Insert(10, 0);
- Console.WriteLine(list[0]);
- Console.WriteLine(list[1]);
- list.RemoveAt(0);
- Console.WriteLine(list[0]);
- Console.WriteLine(list.Count);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement