using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Collections;
namespace ConsoleApplication2
{
public class Program
{
public static void Main()
{
SinglyLinked<int> noteLink = new SinglyLinked<int>();
Console.WriteLine("新增数据");
noteLink.AddNote(5);
noteLink.AddNote(8);
noteLink.AddNote(4);
noteLink.AddNote(1);
noteLink.AddNote(2);
foreach (var item in noteLink)
{
Console.WriteLine(item);
}
Console.WriteLine("删除数据2");
noteLink.RemoveNote(2);
foreach (var item in noteLink)
{
Console.WriteLine(item);
}
Console.WriteLine("在8前面增加99");
noteLink.InsertItemBefore(8,99);
foreach (var item in noteLink)
{
Console.WriteLine(item);
}
Console.WriteLine("在1后面增加55");
noteLink.InsertItemAfter(1,55);
foreach (var item in noteLink)
{
Console.WriteLine(item);
}
Console.WriteLine("节点数量:"+noteLink.Count);
Console.Read();
}
}
public class SinglyLinked<T> where T : IComparable
{
public DNote<T> HeadNote;
public int Count{get;set;}
public SinglyLinked()
{
HeadNote = new DNote<T>(default(T));
}
public void AddNote(T t)
{
DNote<T> tNote = HeadNote;
while (tNote.NextNote!= null)
{
tNote = tNote.NextNote;
}
tNote.NextNote = new DNote<T>(t);
Count++;
}
public IEnumerator<T> GetEnumerator()
{
DNote<T> tNote = HeadNote;
while (tNote.NextNote != null)
{
tNote = tNote.NextNote;
yield return tNote.NoteValue;
}
}
public void RemoveNote(T t)
{
DNote<T> tNote = HeadNote;
do
{
if (tNote.NextNote.NoteValue.CompareTo(t) == 0)
{
tNote.NextNote = tNote.NextNote.NextNote;
Count--;
}
tNote = tNote.NextNote;
} while (tNote!=null && tNote.NextNote!=null);
}
public void InsertItemBefore(T t,T insertNoteValue)
{
DNote<T> tNote = HeadNote;
do
{
if (tNote.NextNote.NoteValue.CompareTo(t) == 0)
{
var nextNote = tNote.NextNote;
var newNote = new DNote<T>(insertNoteValue);
newNote.NextNote = nextNote;
tNote.NextNote = newNote;
Count++;
break;
}
tNote = tNote.NextNote;
} while (tNote != null && tNote.NextNote != null);
}
public void InsertItemAfter(T t, T insertNoteValue)
{
DNote<T> tNote = HeadNote;
do
{
if (tNote.NextNote.NoteValue.CompareTo(t) == 0)
{
var nextNote = tNote.NextNote.NextNote;
var newNote = new DNote<T>(insertNoteValue);
newNote.NextNote = nextNote;
tNote.NextNote.NextNote = newNote;
Count++;
break;
}
tNote = tNote.NextNote;
} while (tNote != null && tNote.NextNote != null);
}
}
public class DNote<T>
{
public DNote<T> NextNote { get; set;}
public T NoteValue { get; set; }
public DNote(T t)
{
NoteValue = t;
}
}
}