0
文字を追加および削除するためのDLLを実装しました。このコードの目的は、登録されたキー押下の出力を与えることです。一例として、 'bai-d'は 'bad'(バックスペースを表す ' - ')を与えます。 これまでの追加と削除の操作はうまくいきます。しかし、登録されたキー押下には、カーソルの左右への移動を表す '<'と '>'も含まれています。例は 'ボール< < d>'です。これは '悪い'を与えなければなりません。 私のコードに '<'と '>'を含める方法を思いつくのは難しいです。二重リンクリスト(Java)の 'カーソル'の位置を追跡する
MyLinkedList newList = new MyLinkedList();
String password = input.nextLine();
for (char ch : password.toCharArray()){
if(Character.isLetter(ch) || Character.isDigit(ch)){
newList.addRear(ch);
}
if(ch == '-'){
newList.removeRear();
}
/*if(ch == '<'){
//cursor shifting
}
if(ch == '>'){
//cursor shifting
}*/
}
newList.print();
}
ここでは、文字のメソッドを呼び出します。次のセクションでは、DLLの実装の一部を取り上げます。私はサイズのためのメソッドを持って、前と後ろに挿入、前後から削除します。
public void removeFront(){
if(head==null) return;
head = head.next;
head.previous = null;
size--;
}
public void removeRear(){
if(head==null) return;
if(head.next == null){
head = null;
size--;
return;
}
Link current = head;
while(current.next.next != null){
current = current.next;
}
current.next = null;
size--;
}
public void addFront(char data){
if(head==null){
head = new Link(null, data, null);
}
else{
if(Character.isLetter(data) || Character.isDigit(data)){
Link newLink = new Link(null, data, head);
head.previous = newLink;
head = newLink;
}
}
size++;
}
public void addRear(char data){
if (head==null){
head= new Link(null, data, null);
}
else{
Link current = head;
while(current.next != null){
current = current.next;
}
Link newLink = new Link(current, data, null);
current.next = newLink;
}
size++;
}
ご協力いただきありがとうございます。
ペンと紙をつかむと、あなたの例を引き出すに基づいて、フロントとリアのポインタをシフトすると思います。異なる操作を実行するときに 'カーソル'がどこにあるべきか、これらの位置で削除/追加するときに 'Link'sの' next'と 'previous'参照に何が起こるべきかを見てください。正しい 'Link'を常に参照するクラスフィールドを導入し、右への移動、リンクされたリストのナビゲートのための左への移動、現在のリンクでのリンクの削除や追加などの操作を可能にする必要がありますカーソル位置。 Javaの 'LinkedList'実装の' ListIterator'からいつもインスピレーションを得ることができます。 –