感觉 Unity3D c# List 不好用简单重写了双向链表
直接看代码 不喜欢说话 任性
using System.Drawing;
using System.Runtime.ConstrainedExecution;
using Unity.VisualScripting;
namespace Mmorpg
{
internal class CxxList<T>
{
public class Data
{
public T data;
public Data prev;
public Data next;
public Data()
{
prev = null;
next = null;
}
}
private Data begin;
private Data end;
private int count;
public CxxList()
{
count = 0;
begin = null;
end = null;
}
public Data Begin()
{
return begin;
}
public int Size()
{
return count;
}
public T Back()
{
if (end == null)
{
return default;
}
T data = end.data;
return data;
}
public T Front()
{
if (begin == null)
{
return default;
}
T data = begin.data;
return data;
}
public T PopBack()
{
if (end == null)
{
return default;
}
T data = end.data;
Data endPrev = end.prev;
if (endPrev != null)
{
endPrev.next = null;
end.data = endPrev.data;
Data endPrevPrev = endPrev.prev;
if (endPrevPrev != null)
{
endPrevPrev.next = end;
end.prev = endPrevPrev;
}
}
else
{
begin = null;
end = null;
}
--count;
return data;
}
public T PopFront()
{
if (begin == null)
{
return default;
}
T data = begin.data;
Data beginNext = begin.next;
if (beginNext != null)
{
beginNext.prev = null;
begin.data = beginNext.data;
Data beginNextNext = beginNext.next;
if (beginNextNext != null)
{
beginNextNext.prev = begin;
begin.next = beginNextNext;
}
}
else
{
begin = null;
end = null;
}
--count;
return data;
}
public void PushBack(T data)
{
Data node = new()
{
prev = null,
data = data,
next = null
};
if (begin == null && end == null)
{
begin = node;
end = node;
}
else
{
end.next = node;
node.next = null;
node.prev = end;
end = node;
}
++count;
}
public void PushFront(T data)
{
Data node = new()
{
prev = null,
data = data,
next = null,
};
if (begin == null && end == null)
{
begin = node;
end = node;
}
else
{
node.next = begin;
node.prev = null;
begin.prev = node;
begin = node;
}
++count;
}
}
}