Односвязный Список C#

27.09.2013
2
0
#1
Здравствовать всем !
Заклинило меня на одной ,довольно простой задаче.
Есть код реализации простого односвязного списка:c#
/*######################################
Односвязный список
######################################*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cshp05a10
{

class Listenelement
{
string daten;
Listenelement next;

//Метод для ввода данных
public void SetDaten(string datenNeu)
{
daten = datenNeu;
//обозначаем конец списка
next = null;
}
// Метод для ввода нового элемента
public void AddNext(string datenNeu)
{
if (next == null)
{
next = new Listenelement();
next.SetDaten(datenNeu);
}
else
next.AddNext(datenNeu);
}

//Метод для вывода списка
public void PrintOut()
{
Console.WriteLine(daten);
if (next != null)
next.PrintOut();
}
}

class Program
{
static void Main(string[] args)
{
//ссылка для нового элемента
Listenelement listenBeginn = new Listenelement();

//вводим данные для первого элемента
listenBeginn.SetDaten("Element 1");

//прицепляем следующие элементы
for (int element = 2; element < 4; element++)
listenBeginn.AddNext("Element " + element);

//выводим список
listenBeginn.PrintOut();
}
}
}


Требуется изменить код, чтобы новый элемент цеплялся
сразу в конец списка , не проходя по всему списку.
Я пытался возле ссылки на начало списка создать ссылку на
конец списка
Listenelement listenEnd = new Listenelement();
Пытаюсь изменить метод AddNext , одна из попыток :
// Метод для ввода нового элемента
public void AddNext(string datenNeu)
{
if (next !== null)
{
next = new Listenelement();
next.SetDaten(datenNeu);
}
}
затем в конце главного добавить
listenEnd.PrintOut();
Понимаю что это примитивно , также понимаю что решение
долно быть простым , но...
Заранее благодарен всем кто ответит.
 

Whatka

Well-Known Member
09.10.2011
428
4
#2
Можно сделать более консервативную реализацию)
C++:
//
namespace CS_temp
{
struct Node
{
string data;
Node next;
}
class MyList
{
Node Head, Tail;
int Length;
public void Push(Node newNode);
public void show();

//....
}
//