単一リンクリスト:
* 1. リンクリストは順序付きリストまたは順序なしリストにすることができます
* 2. リンクリストの内容は通常、分散されるまでメモリに保存されます
* 3. リンクリストはノードで構成されます。各ノードは同じ構造を持ちます
* 4. ノードはデータドメインとチェーンドメインに分かれており、データドメインにはノードの内容が格納され、チェーンドメインには次のノードのポインタが格納されます
package myLinkList;
public class MyLinkedList
this.data = data;
this.next = next;
}
}
private Node header;//リンクリストヘッドノード
private Node tailer;/ /リンクリスト末尾ノード
private int size ;//リンクリストの長さ(ノード数)
/**
*ノード: ノードオブジェクト
* データフィールド data とリンクフィールド next (次のノードオブジェクトを指す) が含まれます
*/
public MyLinkedList() {//空パラメータ構築
header = null;
tailer = null;
}
public MyLinkedList(T data ) {//パラメータ付きの構築
header = new Node(data,null);// ヘッダーノードの作成
tailer = header;
size++;
}
/**
* リンクリストの初期化
*/
public int getSize() {
return size;
}
/**
* リンクされたリストの長さを調べます
* @return
*/
public T get(int Index) {
if(index size- 1)
throw new IndexOutOfBoundsException("インデックスが範囲外です ");
return getIndexNode(index).data;
}
public Node getIndexNode(int index){
if(index < 0 || Index > size- 1)
throw new IndexOutOfBoundsException("インデックスが範囲外") ;
Node current = header;
for(int i = 0; i ;
}
/**
* インデックスがindexであるノードのデータを返す
* @param Index Index
* @return
*/
public int getIndex(T element ) {
if(element == null)
return -1;
Node current = header;
for(int i = 0; i if(current.data == element){
return i;
}
current = current.next;
}
return -1;
}
/**
* リンクされたリスト内の要素の位置を返します。要素が存在しない場合は、-1 を返します
* @param tdata
* @return
*/
public void add(T element) {
Node n = new Node(element, null);
if(header == null){
header = n;
tailer = header;
}else{
tailer.next = n;
tailer = n;
}
size++;
}
/**
* リンクリストの最後に要素を追加します
* @param 要素
*/
public void addAtheader(T element) {
header = new Node(element,header);
if(tailer = = null){
tailer = header;
}
size++;
}
/* *
* リンクされたリストの先頭に要素を追加します
* @param 要素
*/
public void insert(int Index,T element) {
if(index<0 || Index>size- 1) {
throw new IndexOutOfBoundsException("index out of Bounds");
}
if (header==null){
add(element);
}else{
if(index==0){
addAtheader(element);
}else{
Node current = getIndexNode(index);
Node insertNode = new Node(element,current.next);
current.next = insertNode;
size++;
}
}
}
/**
* インデックス位置の後に要素を挿入します
* @param Index
* @param element
*/
public T deleteNode(intindex){
if(index<0 | ) | Index>size-1)
throw new IndexOutOfBoundsException("index out ofbounds");
if(index == 0){// ヘッド内の要素を削除
Node n = header;// ヘッドノードを記録する
header = header.next;//ヘッドポインタを次のノードへ指す
size--;
return n.data;//レコードnodeの内容を出力
}else {//他の場所で削除
Node current = getIndexNode (index); //現在のノードを取得します
Node pre = getIndexNode(index-1); //前のノードを取得します
pre.next = current.next; //前のノードのchainフィールドはnullに設定されます
size--;
return current.data;//削除されたノードのデータフィールドを返す
}
}
/**
* 任意の位置のノードを削除します
* @param Index
* @return
*/
public T deleteHeader(){
return deleteNode(0);
}
/**
* ヘッドノードを削除します
* @return
*/
public T deleteTailer(){
return deleteNode(size-1);
}
//ノードをクリアします
public void clear(){
header = null;
tailer = null;
size = 0;
}
/**
* toString();
*/
public String toString(){
if(size == 0)
return "[]";
Node current = header;
StringBuilder sb = new StringBuilder();
sb.append("[");
while(current.next != null) {
sb.append(current.data) .append(" ");
current = current.next;
}
sb.append(current.data).append("]");
return sb.toString();
}
public static void main (String[] args) {
MyLinkedList
link.add("ヘッダー");
link.add("11");
link.add("22");
link.add("33");
link.addAtheader("newheader");
link.insert(2, "1.5");;
System.out.println(link.getIndex("11"));
System.out.println(link. getIndex("88"));
System.out.println(link.get(0));
System.out.println(link.getSize());
System.out.println(link.deleteHeader()) ;
System.out.println(link.deleteTailer());
System.out.println(link.deleteNode(1));
System.out.println(link);
link.clear();
システム。 out.println(リンク);
}
}
以上がJavaでの単一リンクリストの紹介と使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。