Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры - C#
Формулировка задачи:
Создать очередь, информационные поля которой содержат строки из файла (список фамилий учащихся). Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры. (Учесть, что такая фамилия может оказаться первой в списке.)
Программа исправно удаляет, если первый элемент
Если иной, то удаляется 3-ий элемент
Разбор дебагером и проверка значений не помогли
Подскажите где искать ошибку
Заранее спасибо!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace task632
{
class Node // Узел для списка, стека, очереди
{
public string inf;
public Node next;
public Node(string inf, Node next) // Конструктор
{
this.inf = inf;
this.next = next;
}
}
class MyQueue // Класс очередь
{
Node head; // Голова
Node tail;
public MyQueue()
{
head = null;
tail = null;
}
public bool QueueIsEmpty() // Проверка на пустоту
{
return head == null;
}
public void InQueue(string inf) // Положить в хвост очереди
{
Node p = new Node(inf, null);
if (QueueIsEmpty())
{
head = p; tail = p;
}
else
{
tail.next = p; tail = p;
}
}
public int Search() // Ищем индекс фамилии
{
Node p = head;
int i = 0;
Console.WriteLine("Введите букву");
Char Ch = Convert.ToChar(Console.ReadLine());
do
{
int found = p.inf.IndexOf(Ch);
if (found == 0)
return i;
else
i++;
p = p.next;
}
while (p != null);
return -1;
}
public void Delete(int index) // Удаляем фамилию по индексу
{
if (index != 0)
{
Node p = head;
for (int i = index; i < index + 1; i++)
p = p.next;
if (p.next != null)
p.next = p.next.next;
}
else
head = head.next;
}
public void Print()
{
Node p = head;
Console.WriteLine();
do
{
Console.WriteLine(" {0} ", p.inf);
p = p.next;
}
while (p != null);
}
}
class Program
{
static void Main(string[] args)
{
int n = 5;
FileStream File = new FileStream("C:\\text.txt", FileMode.Open);
StreamReader f1 = new StreamReader(File);
MyQueue queue = new MyQueue();
string m = null;
for (int i = 0; i < n; i++)
{
m = f1.ReadLine();
queue.InQueue(m);
}
f1.Close();
File.Close();
int index = queue.Search();
if (index != -1)
queue.Delete(index);
queue.Print();
Console.ReadKey();
}
}
}Решение задачи: «Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры»
textual
Листинг программы
public void Delete(int index) // Удаляем фамилию по индексу
{
if (index != 0)
{
Node p = head;
Node before;
Node after;
for (int i = 0; i < index-1; ++i)
{
p = p.next;
}
before = p;
after = p.next.next;
before.next = after;
}
else
head = head.next;
}