Почему бы вам не написать собственный связанный список следующим образом:
class Node<T> : IComparable<T>
{
public int Priority {set;get;}
public T Data {set;get;}
public Node<T> Next {set;get;}
public Node<T> Previous {set;get;}
// you need to implement IComparable here for sorting.
}
Это ваши определения узлов. Теперь нам нужно реализовать класс LinkedList.
Ваш класс связанного списка может быть двусвязным списком, так как у вас нет никаких спецификаций. и было бы проще с двусвязным списком.
Вот определение:
class LinkedList<T> : IEnumerable<T> where T: IComparable
{
public Node<T> Head {set;get;}
public Node<T> Tail {set;get;}
// set of constructors
//.....
public void Insert(Node<T> node)
{
// you can do recursive or iterative impl. very easy.
}
// other public methods such as remove, insertAfter, insert before, insert last etc.
public void Sort()
{
// easiest solution is to use insertion sort based on priority.
}
}
Если вы можете уйти, создав дополнительную память, то есть: другой связанный список. сортировка вставки будет в порядке. Для этого вам также необходимо реализовать функцию вставки после.
У меня есть реализация LinkedList , вы можете проверить это. Вам просто нужно реализовать сортировку по приоритету, вы можете использовать пузырьковую сортировку, сортировку вставкой или сортировку слиянием.
Кроме того, вы можете захотеть взглянуть на кучу, которую вы можете использовать для реализации приоритетной очереди, она служит цели. У меня есть Реализация структуры данных кучи Реализация, вы можете проверить ее.