次のデータセットがリンクリストに保存されているとします (ヘッダーを除く)。
ID | Name
1 | John
2 | Albert
3 | Simon
ここで、たとえばアルファベット順にノードを並べ替えたいと思います。
配列 (および Lists、Vectors、ArrayLists などの同様のもの) を使用せずに、ライブラリの並べ替え方法 (Collections.sort など) を使用せずに、独自の並べ替え方法を考え出す方法を知りたいです。
つまり、ソートの概念と、ノードを体系的に配置するにはどうすればよいかを知りたいのです。効率的である必要はありません。機能する必要があります。
Javaでこれを試してみますが、疑似コードまたはヒント/ヒント/その他のリソースもいただければ幸いです。
ありがとうございました。
補遺:
LinkedList.java
class LinkedList
{
private Node head; // first node in the linked list
private int count;
public int getCount()
{
return count;
}
public Node getHead()
{
return head;
}
public LinkedList()
{
head = null; // creates an empty linked list
count = 0;
}
public void deleteFromFront()
{
if (count > 0)
{
Node temp = head;
head = temp.getLink();
temp = null;
count--;
}
}
public void AddToFront(Object cd)
{
Node newNode = new Node(cd);
newNode.setLink(head);
head = newNode;
count++;
}
public void RemoveAtPosition(int n)
{
int counter=1;
Node previous=null;
if(n==1)
deleteFromFront();
else if(n<=getCount())
for(Node j=head;j!=null;j=j.getLink())
{
if(counter==n&&previous!=null)
{
previous.setLink(j.getLink());
j.setLink(null);
}
previous=j;
counter++;
}
else
System.out.println("Unable to remove object at position "+n);
}
public void AddAtPosition(int n, Object cd)
{
int counter=1;
Node newNode=new Node(cd);
Node previous=null;
for(Node j=head;j!=null;j=j.getLink())
{
if(counter==n&&previous!=null)
{
newNode.setLink(j.getLink());
j.setLink(newNode);
}
previous=j;
counter++;
}
}
public void Swap(int n1, int n2)
{
// how do I swap nodes?
}
public void Sort()
{
// how do I sort nodes?
}
}
Node.java
public class Node {
private Object data;
private Node link;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getLink() {
return link;
}
public void setLink(Node link) {
this.link = link;
}
public Node(Object data) {
this.data = data;
this.link = null;
}
}