Я создал простой список классов с нуля.Это для задания класса, над которым я работаю около недели - очень новый для списков.Мы не можем использовать дженерики, поэтому попытка исследовать мой вопрос ниже не принесла результатов.Хотя BetterCoder мне удалось просмотреть 7 учебных пособий по YouTube, и я нашел кое-что в своей книге, но ничего с примером «слияния».
У меня есть три класса - мой узел, мой список и моя программа,В моем классе списков я работаю над созданием метода Merge (), который в конечном итоге сравнивает данные в двух списках и объединяет их в упорядоченный список.
Прямо сейчас по какой-то причине мой метод слияния - который очень помогает мне понять, что происходит - работает неправильно.Ему переданы оба списка, и он добавляет данные из listTwo в listOne, НО по какой-то причине, когда он печатает на консоль, данные второго узла отображаются дважды:
EX: 1 -> 2 -> 2
вместо печати головки (1), следующей (2), а затем следующей (3), которая должна быть.
EX: 1 -> 2 -> 3
В программном классе я доказал с помощью строки записи, что (listOne.firstNode.Next.Next.Data) = 3.Каким он должен быть.
Может кто-нибудь помочь мне выяснить, правильно ли указываются узлы в первом списке или что там происходит?
МойМетод слияния должен быть передан обоим объектам списка (listOne и listTwo), и в конце концов мне нужно сделать так, чтобы они передавались как ссылки, но я еще не понял этого и остановлюсь на этом позже, я полагаю.
namespace LinkedList
{
//This is my Node Class
class Node
{
public object Data { get; set; }
public Node Next { get; set; }
public Node(object dataValue) : this(dataValue, null) { }
public Node(object dataValue, Node nextNode)
{
Data = dataValue;
Next = nextNode;
}
}
//This is my List Class
class List
{
public Node firstNode;
public int count;
public List()
{
firstNode = null;
}
public bool Empty
{
get { return this.count == 0; }
}
public int Count
{
get { return this.count; }
}
public object Add(int index, object o)
{
if (index < 0)
throw new ArgumentOutOfRangeException("Index: " + index);
if (index > count)
index = count;
Node current = this.firstNode;
if (this.Empty || index == 0)
{
this.firstNode = new Node(o, this.firstNode);
}
else
{
for (int i = 0; i < index - 1; i++)
current = current.Next;
current.Next = new Node(o, current.Next);
}
count++;
return o;
}
public object Add(object o)
{
return this.Add(count, o);
}
public object Merge(List a, List b)
{
a.Add(b.firstNode.Data);
return a;
}
public void Print()
{
while (this.count > 0)
{
Console.Write(firstNode.Data + "->");
if(firstNode.Next != null)
firstNode.Data = firstNode.Next.Data;
count--;
}
}
}
//And here is my Program
class Program
{
static void Main(string[] args)
{
List listOne = new List();
List listTwo = new List();
listOne.Add(1);
listOne.Add(2);
listTwo.Add(3);
listTwo.Print();
Console.WriteLine("");
listOne.Merge(listOne, listTwo);
Console.WriteLine("");
listOne.Print();
//This line below shows that the data "3" from listTwo is being added to listOne in the list Merge Method
//Console.WriteLine(listOne.firstNode.Next.Next.Data);
Console.ReadKey();
}
}
}