# 单向链表

1、节点定义：

public class Node<T>
{
private T data;//数据域
private Node<T> next;//引用域
/// <summary>
/// 构造器，数据值为输入数据值
/// </summary>
/// <param name="val"></param>
public Node(T val)
{
data = val;
next = null;
}
/// <summary>
/// 构造器，数据值为系统默认值
/// </summary>
public Node()
{
data = default(T);
next = null;
}
/// <summary>
/// 数据域属性
/// </summary>
public T Data
{
get {return data;}
set { data = value; }
}
/// <summary>
/// 引用域属性
/// </summary>
public Node<T> Next
{
get { return next; }
set { next = value; }
}
}

2、单链表实现

public interface IListDS<T>
{
bool Insert(T item,int pos);//插入元素
bool IsEmpty();//是否为空
int GetLength();//得到容量
void Append(T item);//添加新元素
void Clear();//清空
T Delete(int pos);//删除元素
T GetElem(int pos);//根据索引查找
int Locate(T value);//根据值查找
}

{
/// <summary>
/// 单链表的头节点
/// </summary>
{
set { head = value; }
}
/// <summary>
/// 构造器，构造具有空指针的头节点
/// </summary>
{
}
/// <summary>
/// 求单链表长度
/// </summary>
/// <returns></returns>
public int GetLength()
{
int length = 0;
while (currNode != null)
{
++length;
currNode = currNode.Next;
}
return length;
}
/// <summary>
/// 清空单链表
/// </summary>
public void Clear()
{
}
/// <summary>
/// 判断单链表是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return (head == null) ? true : false;
}
/// <summary>
/// 在单链表末尾添加新元素
/// </summary>
/// <param name="item"></param>
public void Append(T item)
{
Node<T> newNode = new Node<T>(item);
Node<T> currNode = null;
{
return;
}
while (currNode.Next != null)
{
currNode = currNode.Next;
}
currNode.Next = newNode;
}
/// <summary>
/// 在指定位置插入元素
/// </summary>
/// <param name="item"></param>
/// <param name="pos"></param>
/// <returns></returns>
public bool Insert(T item, int pos)
{
if (IsEmpty() || pos < 0)
{
Console.WriteLine("The list is empty");
return false;
}
Node<T> newNode = new Node<T>(item);
if (pos == 0)
{
return true;
}
int index = 1;
while (currNode.Next != null && index < pos)
{
preNode = currNode;
currNode = currNode.Next;
++index;
}//寻到pos-1个节点

if (index == pos)
{
newNode.Next = currNode;
preNode.Next = newNode;
return true;
}
else
{
Console.WriteLine("The position is error");
return false;
}
}
/// <summary>
/// 删除指定索引位置的元素
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public T Delete(int pos)
{
if (IsEmpty() || pos < 0)
{
return default(T);
}

T data = default(T);
if (pos == 0)
{
return data;
}
int index = 1;
while (currNode.Next != null && index < pos)
{
++index;
preNode = currNode;
currNode = currNode.Next;
}//寻到pos-1个节点

if (index == pos)
{
preNode.Next = currNode.Next;
return currNode.Data;
}
else
{
Console.WriteLine("The position is out of range");
return default(T);
}
}
/// <summary>
/// 根据索引查找
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public T GetElem(int pos)
{
if (IsEmpty())
{
Console.WriteLine("The list is empty");
return default(T);
}
int index = 0;
while (currNode.Next != null && index < pos)
{
++index;
currNode = currNode.Next;
}
if (index == pos)
return currNode.Data;
else
{
Console.WriteLine("The position is out of range");
return default(T);
}
}
/// <summary>
/// 根据值查找
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int Locate(T value)
{
if (IsEmpty())
{
Console.WriteLine("The list is empty");
return -1;
}
Node<T> currNode = new Node<T>();
int pos = -1;
while (currNode != null && currNode.Data.Equals(value))
{
currNode = currNode.Next;
++pos;
}//此处有问题
if (currNode == null)
return -1;

return pos;
}
}

class Program
{
static void Main(string[] args)
{

/*添加*/
demoList.Append("Wang Hongjian");
demoList.Append("ZhangSan");
demoList.Append("LiSi");
for (int i = 0; i < demoList.GetLength(); i++)
{
Console.WriteLine("The {0} item is:/t{1}",i, demoList.GetElem(i));
}
/*插入*/
Console.WriteLine("Insert the item:");
demoList.Insert("Zhangyu", 1);
for (int i = 0; i < demoList.GetLength(); i++)
{
Console.WriteLine("The {0} item is:/t{1}", i, demoList.GetElem(i));
}
/*删除*/
Console.WriteLine("Delelte the item:");
demoList.Delete(3);
for (int i = 0; i < demoList.GetLength(); i++)
{
Console.WriteLine("The {0} item is:/t{1}", i, demoList.GetElem(i));
}
/*根据索引查找*/
Console.WriteLine("The 2st item is:/t{0}", demoList.GetElem(1));
/*根据值查找*/
Console.WriteLine("The position of the item 'Wang Hongjian' is:/t{0}", demoList.Locate("Wang Hongjian"));
/*清空*/
demoList.Clear();
Console.WriteLine("Now the list is empty");
}
}

#### C#单向链表C#单向链表C#单向链表

2010年07月12日 195KB 下载

#### 单向链表的实现 c语言

2009年03月11日 176KB 下载

#### 单向链表逆转单向链表逆转单向链表逆转

2010年07月10日 24KB 下载

#### C++单向链表的实现

2015年11月06日 5KB 下载

#### 单向链表和双向链表的原理及其相关实现

2015-03-03 09:21:18

#### 《链表》——单向链表和双向链表（Java）

2016-05-20 20:03:36

#### 单向链表的简单使用

2016-09-28 20:52:25

#### C#实现单向链表

2008-12-14 23:55:00

#### 单向链表的Java实现，以及相关函数。

2016-10-05 13:34:10

#### 简单的单向链表的创建（总结）

2017-02-07 19:50:05