C#创建链表及对链表的相关操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#创建链表及对链表的相关操作 class Node<T>
{
public T data;
public Node<T> next=null;
public Node()
{ }
public Node(T i)
{
this.data = i;
}
}
class LinkList<T>
{
private Node<T> head;
public LinkList()
{
head = null;
}
/// <summary>
/// 判断链表的长度
/// </summary>
/// <returns></returns>
public int count()
{
Node<T> p = head;//定义⼀个节点
int count = 0;//链表计数器
while (p != null)
{
count++;
p = p.next;
}
return count;
}
/// <summary>
///
/// </summary>
/// <param name="i">第i个节点</param>
/// <returns></returns>
public T GetItem(int i)
{
Node<T> p = head;
int k = 0;
if (i>count()||i<0)
{
Console.WriteLine("i不存在");
}
while (k<i)
{
k++;
p = p.next;
}
return p.data;
}
public void Insert(T e, int i)
{
Node<T> p = new Node<T>(e);
Node<T> q = head;
int k = 0;
if (i==0)
{
p.next = head;
head = p;
return;
}
while (k<i-1)
{
k++;
q = q.next;
}
p.next = q.next;
q.next = p;
}
/// <summary>
/// 在链表末尾添加新节点
/// </summary>
public void Add(T i)
{
head = p;
return;
}
#region 如果节点不为空,遍历该链表
q = head;
while (q.next != null)
{
q = q.next;
}
q.next = p;
#endregion 如果节点不为空,遍历该链表
}
/// <summary>
/// 移除链表上某个节点
/// </summary>
/// <param name="i"></param>
public void RemoveAt(int i)
{
Node<T> p = head;
int k = 0;
if (i>count()||i<0)
{
Console.WriteLine("Error");
}
if (i==0)
{
head.next = head.next.next;
return;
}
while (k<i-1)
{
k++;
p = p.next;
}
p.next = p.next.next;
}
public int IndexOf(T e)
{
Node<T> p = head;
int k = 0;
while (p.next!=null)
{
if (p.data.Equals(e))
{
return k;
}
k++;
p = p.next;
}
if (!p.data.Equals(e))
{
k++;
}
return k >= count() ? -1 : k;
}
/// 查找某个元素在链表中最后⼀次出现的位置
/// </summary>
/// <param name="e">要查找的元素</param>
/// <returns>这个元素在链表中最后⼀次出现的位置的索引</returns> public int LastIndexOf(T e)
{
Node<T> p = head;
int index = -1;//最后⼀次出现的位置索引
int k = 0;//计数器
/*------------------------------------------------
* 遍历整个链表,直到链表结束,每发现相应节点的值
* 与该元素相等,则将该节点的位置索引赋给index,
* 这样index的值就是最后⼀次的值。如果没有,则返
* 回-1
-------------------------------------------------*/
while (p.next != null)
{
if (p.data.Equals(e))
{