レベル 2: 単一循環リンク リストの実装 - リンク リストの削除。タスクは前のレベルで説明されています。単一循環リンク リストの追加および走査機能は完了しました。すでにテーブルにデータを追加して出力できます。次に、削除機能を実装します。このレベルのタスク: 循環リンク リスト内の指定された位置を削除します。

レベル 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 のおかげで)

おすすめ

転載: blog.csdn.net/qq_64001869/article/details/127404120