#c#
#c#
Вопрос:
class IntNode
{
public int value { get; set; }
public IntNode next { get; set; }
public IntNode(int value)
{
this.value = value;
this.next = null;
}
public IntNode(int value, IntNode next)
{
this.value = value;
this.next = next;
}
public bool HasNext()
{
return (next != null);
}
public override string ToString()
{
if (this.HasNext())
return value "-->" next;
else
return value "";
}
}
итак, если бы я хотел удалить 4-й узел с заданным списком, начинающимся с head:
IntNode pos = head.next;
IntNode prev = head;
int counter = 0;
while (pos != null)
{
if (counter == 4) prev.next = pos.next;
prev = pos;
pos = pos.next;
}
Но я хочу удалить первый узел (когда счетчик равен 0). Как я могу это сделать? Спасибо.
Комментарии:
1. Вам нужен корневой узел, чтобы вы могли удалить первый элемент. Узнал об этом 40 лет назад в CS201.
2. Похоже, вы не увеличиваете свой счетчик
Ответ №1:
Что-то вроде этого должно сделать это за вас:
while (pos != null)
{
if ( counter == 0 )
{
head = head.next;
prev = head;
}
else
{
prev.next = pos.next;
}
}
Комментарии:
1. Но когда я печатаю список (после этой функции), он показывает первое число, даже если оно было удалено. Единственный случай, с которым это сработает, — это если я буду печатать head.next но это нехорошо, потому что я не всегда удаляю первый узел.
2. Тогда, наверное, мне нужно было бы посмотреть вашу функцию печати и как она перемещается по списку.
Ответ №2:
public void Remove(int index) {
if(head != null)
{
if(index == 0)
{
head = head.next;
}
else
{
IntNode pos = head.next;
IntNode prev = head;
while (pos != null)
{
--index;
if (index == 0)
{
prev.next = pos.next;
break;
}
prev = pos;
pos = pos.next;
}
}
}
}
Комментарии:
1. Это не работает, потому что, если у меня есть 1->2->3->4 и функция получает заголовок (не индекс, потому что вы должны получить список), поэтому head будет head.next только в функции, а не снаружи (протестировал это)
2. Я полагаю, вы неправильно поняли… Эта функция должна быть определена в классе, где определен head, чтобы она могла напрямую изменять значение head…