C#创建链表及对链表的相关操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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))

{

相关文档
最新文档