C#数据结构删除用法
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication7
{
public class LinkedList
{
//成员
private int count;//记录元素个数
private Node head;//头指针
//方法
public void Add(object value)//在链表结尾添加元素
{
Node newNode = new Node(value);
if (head == null)
{//如果链表为空则直接作为头指针
head = newNode;
}
else//否则插入链表结尾
{
GetByIndex(count - 1).next = newNode;
}
count++;
}//在指定索引处插入元素
public void Insert(int index, object value)
{
Node tempNode;
if (index == 0)
{
if (head == null)
{
head = new Node(value);
}
else
{
tempNode = new Node(value);
tempNode.next = head;
head = tempNode;
}
}
else
{
Node prevNode = GetByIndex(index - 1);//查找插入点的前驱结点
Node nextNode = prevNode.next;//插入点的后继结点
tempNode = new Node(value);//新结点
prevNode.next = tempNode;//前驱结点的后继结点为新结点
tempNode.next = nextNode;//指定新结点的后继结点
}
count++;
}
public void RemoveAt(int index)//删除指定索引元素
{
if (index == 0) //如果要删除开始结点
{
head = head.next;
}
else
{
Node prevNode = GetByIndex(index - 1);//查找删除结点的前驱结点
if (prevNode.next == null)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围");
}
prevNode.next = prevNode.next.next;//删除
}
count--;
}
public override string ToString() //打印整个链表,仅用于测试
{
string s = "";
for (Node temp = head; temp != null; temp = temp.next)
{
s += temp.ToString() + "";
}
return s;
}
private Node GetByIndex(int index) //查找指定索引的元素
{
if ((index < 0) || (index >= this.count))
{
throw new ArgumentOutOfRangeException("index", "索引超出范围");
}
Node tempNode = this.head;
for (int i = 0; i < index; i++)
{
tempNode = tempNode.next;
}
return tempNode;
}
//删除所选元素的方法
public void Remove(object value)
{
Node NowNode = new Node(value);
int j = 0;
Node tempNode = this.head;
for (int i = 0; i < count; i++)
{
if (NowNode.item == tempNode.item)
{
break;
}
else
{
tempNode = tempNode.next;
j++;
}
}
RemoveAt(j);
}
//属性
public int Count //指示链中的元素个数
{
get { return count; }
}
public object this[int index]
{
get { return GetByIndex(index).item; }
set { GetByIndex(index).item = value; }
}
//嵌套类,表示单个结点
private class Node
{
public Node(object value)
{
item = value;
}
public object item;//数据域
public LinkedList.Node next;//指针域,指向后继结点
public override string ToString()
{
return item.ToString();
}
}
}
class Program
{
static void Main(string[] args)
{
LinkedList lst = new LinkedList();
lst.Add(0);//添加
lst.Add(1);
lst.Add(2);
lst.Add(3);
lst.Insert(2, 50);//插入
Console.WriteLine(lst.ToString());
lst.RemoveAt(1);//删除
lst[2] = 9;//访问
Console.WriteLine(lst.ToString());
Console.WriteLine("输入要添加的元素");
object n = Console.ReadLine();
lst.Add(n);
Console.WriteLine(lst.ToString());
Console.WriteLine("输入要删除的元素");
object m = Console.ReadLine();
lst.Remove(m);
Console.WriteLine(lst.ToString());
Console.ReadKey();
}
}
}
我的问题是删除所选元素那个方法有问题,一直报错,我也看了很久,不知道哪里出错了,希望有人指导一下。