これは多分OOPの概念については、一般的な質問です。私はJAVAでDSの実装を始めています。私は、リンクリストを実装しようとしていますし、すべてのオンライン資源項目の上に、私は同様の練習を参照してください。
- ノードクラスを作成します。
- ノードオブジェクトを持つクラスリンクリストを作成します。
同様に、私は、スタック、キューと木のために見ました。私は以下のように一つのクラスそのルックスを持つことにより、LinkedListのを実装する場合私の質問は、次のとおりです。
class LinkList {
int data;
LinkList next; }
私はまだすべての操作を行うことができると思います。ルートまたはヘッダを含む第2のクラスを持つという概念は唯一のOOPの目的や他の何かのためにあるので?私は、次のコードを書き、それがヘッダのポインタを持っている必要がなく、すべてうまく動作します。私は、すべてのメソッドで参照変数を使用し、メインクラスのオブジェクトは、まだ頭を追跡します。
/* package codechef; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class LinkList {
int data;
LinkList next;
LinkList(){
data = 0;
next = null;
}
LinkList(int data) {
this.data = data;
next = null;
}
LinkList insertAtBegin(int data){
LinkList newBegin = new LinkList(data);
newBegin.next = this;
return newBegin;
}
void insertAtPlace(int data, int insertData){
LinkList newNode = new LinkList(insertData);
LinkList iterator = this;
while(iterator!=null && iterator.data!=data){
iterator = iterator.next;
}
if(iterator.data == data)
{
newNode.next = iterator.next;
iterator.next = newNode;
}
}
void insertAtLast(int data) {
if(next == null){
next = new LinkList(data);
}
else{
next.insertAtLast(data);
}
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
LinkList linkList = new LinkList(6);
linkList.insertAtLast(5);
linkList.insertAtLast(3);
linkList.insertAtLast(2);
linkList.insertAtLast(1);
linkList = linkList.insertAtBegin(10);
LinkList iterator = linkList;
while(iterator!=null){
System.out.print(iterator.data);
iterator = iterator.next;
}
System.out.print("\n");
linkList.insertAtPlace(5,-1);
iterator = linkList;
while(iterator!=null){
System.out.print(iterator.data);
iterator = iterator.next;
}
}
}
あなたは、リンクリストのどこかの頭を追跡する必要があります。そうしないと、どのようにリスト全体を反復、またはリスト内の要素を検索しますか?
あなたの場合はLinkList
、基本的に(データと次のノードを基準とした)ノードである、あなたはのヘッドノードを追跡し、いくつかの別のクラス内のすべてのリンクリストの操作(追加、削除、など...)を実装する必要がありますリスト。
これは、ノードクラスを使用してリンクリストクラスにあなたを思い出させます。
あなたが追加したコードについては、LinkList insertAtBegin(int data)
リストの最初のノードにそれを呼び出す場合にのみ、リストの先頭にノードを挿入します。しかし、そこのは、それが基本的に元のリストのサブリストでの新しい要素と両端で始まる新しいリストを返します。その場合には、リストの任意のノード上でそれを呼び出すことからあなたを停止する何も、。