1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
单链表:从第一个节点连接到后一个节点,靠线连接,知道最后一个节点连接到null。
增加:往最后一个节点之后连接一个新的节点,这个节点后面为null
插入:分两种,1,插在头节点,就头节点往后移一位。2,插在中间,比如插在3,4中间,就在3.next为要插入的,然后插入的连接上4。
删除:把6号删除,就是6除去,5连接到7.
跟顺序表中一样先定义一个接口,把所有要实现的方法,放入,这里就不写了。
下面时方法的实现:
class LinkList<T> : IListDS<T>
{
private Node<T> head;//定义一个头节点、
public LinkList()
{
head = null;//置空
}
public T this[int index]
{
get
{
Node<T> temp = head;
for (int i = 1; i <= index; i++)
{
//temp往后移动到要插入的那个数前一位
temp = temp.Next;
}
return temp.Date;
}
}
public void Add(T item)
{
Node<T> newNode = new Node<T>(item);//定义一个新的节点
if(head == null)//为空,这个就是头节点
{
head = newNode;
}
else
{
//把新来的节点,放到最后面
//要访问到尾节点
Node<T> temp = head;
//跳转到最后一个节点
while (true)
{
if(temp.Next != null)
{
temp = temp.Next;
}
else
{
break;
}
}
temp.Next = newNode;//把要添加的节点,放到最后一个的后面一个,也就是链表的尾部
}
}
public void Clear()
{
head = null;
}
public T Delete(int index)
{
Node<T> temp = head;
T date = default(T);//取得值,节点中的
if (index == 0)
{
date = head.Date;
temp = temp.Next;
}
else if (index > 0)
{
for (int i = 0; i < index; i++)//到要删除的下标的那个数的前一位
{
temp = temp.Next;//temp往后移到要删除的哪一位的前一位
}
Node<T> preNode = temp;//删除的数的前一位
Node<T> currentNode = temp.Next;
Node<T> nextNode = temp.Next.Next;//删除的数的后一位
preNode.Next = nextNode;//
date = currentNode.Date;//删除的这个节点的数据
}
return date;
}
public T GetElem(int index)//获取元素
{
return this[index];
}
public int GetLength()
{
Node<T> temp = head;
int count = 1;
if (head == null)
return 0;
else
{
while (true)
{
if(temp.Next != null)
{
count++;
temp = temp.Next;
}
else
{
break;
}
}
return count;
}
}
public void Insert(T item, int index)
{
Node<T> newNode = new Node<T>(item);
if(index == 0)
{
newNode.Next = head;//插入的节点的后一位
head = newNode;
}
else
{
Node<T> temp = head;
for (int i = 1; i <index; i++)
{
//temp往后移动到要插入的那个数前一位
temp = temp.Next;
}
Node<T> proNode = temp;//要插入的数的前一位
Node<T> currentNode = temp.Next;//要插入的那位书数
proNode.Next = newNode;
newNode.Next = currentNode;//前一位的节点到要插入的,要插入的到过去那个位置上的节点
}
}
public bool IsEmpty()
{
return head == null;
}
public int Locate(T value)
{
Node<T> temp = head;
if(temp == null)
{
return -1;//头节点为空
}
else
{
int index = 0;
while (true)
{
if(temp.Date.Equals(value))
{
return index;//当相等的时候返回这时候的index;
}
else
{
if(temp.Date != null)
{
temp = temp.Next;//往后移动
index++;
}
else
{
break;
}
}
}
return -1;//没有找到
}
}
}