实现单链表的removeItem()

时间:2015-03-17 16:55:35

标签: java

下面是java中实现的SingleLinkedList类型抽象。

 public class SingleLinkedList<T>{

        /**
         * Abstract data type constitutes constructor and selector functions
         * written below under representation that hold below invariant:
         * If a recursive list s is constructed from a first element f and a recursive list r, then
         *    • first(s) returns f, and
         *    • rest(s) returns r, which is a recursive list.
         */


        /**
         * Representation - start
         */

        private static SingleLinkedList<?> emptyList = null;
        private T item;
        private SingleLinkedList<T> restOfTheList;

        /**
         * Constructor
         * @param first
         * @param rest
         */
        public SingleLinkedList(T first, SingleLinkedList<T> rest){
                this.item = first;
                this.restOfTheList = rest;
        }

        /**
         * Selector function
         * @param list
         * @return
         */
        private T first(){
            return this.item;
        }

        /**
         * Selector function
         * @param list
         * @return
         */
        private SingleLinkedList<T> rest(){
            return this.restOfTheList;
        }

        /**
         * Representation - end
         */


        /**
         * User interface - starts
         * These methods must take help of constructor or selector and some helper functions.
         */

        public final int length(){
            return this.lengthOfTheList(0); 
        }

        protected final int lengthOfTheList(int length){
            if(this.rest() == emptyList){
                return length;
            }else{
                return this.rest().lengthOfTheList(length + 1);
            }
        }



        public final T getItem(int position){
            if(position == 1){
                return this.first();
            }else{
                return this.rest().getItem(position - 1);
            }
        }


        public final void removeItem(int position){

        }


        public static void main(String[] args){
            SingleLinkedList<Integer> list = new SingleLinkedList<Integer>(3, new SingleLinkedList<Integer>(2, new SingleLinkedList<Integer>(1, null)));
            list = new SingleLinkedList<Integer>(4, list);
            list.removeItem(3);

        }
    }

我需要一些关于完成removeItem()方法的提示。

这项工作不是任何家庭作业问题的一部分。

我正在尝试将此python code移植到java。

请帮助我!!

1 个答案:

答案 0 :(得分:0)

如果您要删除列表中的特定项,则需要跟踪2件事

  1. 您正在查看的节点
  2. 当前位置的下一个节点。 (在操作它之前,你需要检查它是否为空。)
  3. 现在,让我们想一想逻辑。我们假设我列出了以下项目:

    1 -> 3 -> 5 -> 7 -> 9 -> NULL
    ^              ^          ^
    head    item to remove    tail
    

    因此,如果我们要删除7,我们需要将下一个节点设为5点到9。

    1 -> 3 -> 5 -/ 7  -> 9 -> NULL
    ^         -----------^    ^
    head                      tail
    

    执行此操作时必须的情况:

    • 删除头节点后你会怎么做?
    • 删除尾节点时如何处理
    • 在两个节点之间删除节点时,您会怎么做? (以上证明)

    这应该足以提示&#34;&#34;让你开始一如既往,想办法成为魔鬼的拥护者&#34 ;;什么会打破我的计划。如果以这种方式接近结构,那么在推断数据结构时,尤其是如果它是可变的,您将避免很多麻烦。