レベル 2: 単一循環リンク リストの実装 - リンク リストの削除
200
- ミッション要件
- 参考回答
- コメント42
ミッションの詳細
最後のレベルでは、単一循環リンク リストの追加機能と走査機能が完了し、テーブルにデータを追加して出力できるようになりました。次に、その削除機能を実装します。
このレベルのタスク: 循環リンク リスト内の指定された位置にあるノードを削除し、その値を返します。
関連情報
単一の循環リンク リストの削除操作
単一循環リンクリストの削除操作は、基本的には通常の単一リンクリストの操作と同様であり、削除対象ノードの直接の先行ノードをトラバースして見つけ、その先行ノードのリンク状態を変更する。以下に示すように:
ここで削除するのは末尾ノードですが、単一の循環リンクリストを構築する際にはtail
末尾ノードへのポインタを使用するため、末尾ノードを削除した後にtail
ポイントを変更する必要がありますtail
。
プログラミング要件
このレベルのプログラミング タスクは、右側のコード スニペットの中央Begin
から中央までのEnd
コードを完成させることです。具体的な要件は次のとおりです。
index
指定された位置でノードの削除を完了し、その値を返します。
詳細については、後続のテストサンプルを参照してください。
このレベルに関係するコード ファイルのコード フレームワークMyCircleLinkedList.java
は次のとおりです。
package step2;
/**
* Created by sykus on 2018/1/15.
*/
public class MyCircleLinkedList {
private Node head;//头结点, 不存数据
private Node tail;//尾结点, 指向链表的最后一个节点
private int size;
public MyCircleLinkedList() {
head = new Node(Integer.MIN_VALUE, null);
head.next = head;
tail = head;
size = 0;
}
/**
* 添加到链表尾部
*
* @param item
*/
public void add(int item) {
Node node = new Node(item, tail.next);
tail.next = node;
tail = node;
++size;
}
/**
* 遍历链表并输出元素
*/
public void output() {
Node p = head;
while (p.next != head) {
p = p.next;
System.out.println(p.item);
}
}
/**
* 删除从头结点开始的第index个结点
* index从0开始
*
* @param index
* @return
*/
public int remove(int index) {
checkPosIndex(index);
/********** Begin *********/
Node f = head;
while ((index--) > 0) {
f = f.next;
}
Node del = f.next;
if (del == tail) {
tail = f;
}
f.next = del.next;
del.next = null;
int oldVal = del.item;
del = null;
--size;
return oldVal;
/********** End *********/
}
public boolean isEmpty() {
return head.next == head;
}
public int size() {
return size;
}
private void checkPosIndex(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
//结点内部类
private static class Node {
int item;
Node next;
Node(int item, Node next) {
this.item = item;
this.next = next;
}
}
}
//智科01班 421045 (感谢内生原动力 四阿哥108)
さあ、どうぞ、Three Creations Competition のチームはありますか?
//Zhike 01 クラス 421045 (内因性原動力 Si Age 108 のおかげで)