nn970510
nn970510
采纳率100%
2016-10-07 15:09 阅读 940
已采纳

Java菜鸟问题,求大神们耐心解答

第一次在CDSN上提问,不知道有没有大神可以帮我看看:
这是我们这个星期的作业要求:
The Sorted List ADT
Implement the SortedList class. The SortedList class extends
the List class. Both can be seen here. Your assignment is to
implement (recursively) all of the abstract methods of the List class.
They are:
insert (recursive)
iterator
remove (recursive)
retrieve (recursive)
search (recursive)
You must also implement an Iterator inner class for the
SortedList class. You must submit a modified SortedList.java
file with your source code. Do not submit and do not modify
the List.java file.

然后我试着写了把retrieve,search和iterator方法都写出来了,唯有insert和remove(我想这两个应该差不多)写不出来,这是我试的代码,被报错,求大神们指点
public void insert(E data){
insert(head, data);

private insert(Node curr, data){
Node temp = new Node (data);
if (curr==null || data.compareTo(curr.data)<0){
temp.next=curr;
curr=temp;
break;
}
else{
continue;
}

return insert(curr.next, data);
}
return;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    yinbucheng yinbucheng 2016-10-08 02:00

    如果我是你我会如下
    public void insert(Node pre,Node curr,T data){
    if(pre = null&&curr==null){//这表示开始没有一个节点
    curr = new Node(data);//其实这里还需要让 head = curr.这里设置java内存应用指向问题
    return;
    }

       if(curr.data.compareTo(data)>0){//这表示满足插入条件
            Node temp = new Node(data);
              if(pre!=null){
                        pre.next = temp;
                             temp.next = curr;
                      }else{
                          temp.next = curr;
                        }
        }
        if(curr.next!=null)//这表示它还没到最后
        insert(curr,curr.next,data);
        else{
        Node temp = new Node(data);
         temp.next = null;
        curr.next = temp;
    
        }
    

    }

    我知道你是想curr永远为头节点,但是你写的代码就不是你传入参数可以这眼 Node temp = head;
    insert(null,temp,data)

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-10-07 15:18

    代码不全,直接说报什么错吧。

    点赞 评论 复制链接分享
  • qq869348527 qq.8693 2016-10-07 16:32

    你这个增加的逻辑有问题
    首先判断根节点为空时,直接把当前节点赋值在根节点上 , 对数据大小的比较不应该放在根节点的添加上,根节点的添加交由SortedLink完成
    如果根节点不为空,其余节点的增加应该交给Node类完成,在Node类的add方法中判断当前节点数据的大小,用插入排序进行当前节点数据的添加
    另外题目不是说要继承List接口,那么实现类不应该叫insert,应该叫add

    点赞 评论 复制链接分享
  • qq869348527 qq.8693 2016-10-07 16:36

    remove方法就是让【当前节点的上一个节点】的next指向【当前节点的下一个节点】

    点赞 评论 复制链接分享
  • yinbucheng yinbucheng 2016-10-08 01:47

    你采用的是递归,递归是不是要有个结束条件。你插入的数据是不是有可能为为最大的数据他是不是要插入到最后,没有判断何时是在最后。。。
    并且你的代码写的太乱了,else continue想干嘛。它一般是和while一起使用啊。。。你的思想就是节点的插入,大的插入后面

    点赞 评论 复制链接分享
  • yinbucheng yinbucheng 2016-10-08 02:01

    我的思路是,插入要记录它插入前的节点和后面的节点。
    1.如果插入的为头只需将它的next指向以前的头
    2.如果插入为中间的位置则需要将它前面的next只需它,它的next只需它后面的节点
    3.如果为末尾只需将最后的节点的next指向它

    点赞 评论 复制链接分享
  • qq869348527 qq.8693 2016-10-08 11:42

    帮你写了一下,好久没碰数据结构了,写的好烂。。 类似插入排序的方法

     public class SortedLinked
    {
        private class Node
        {
            private String data ;
            private Node next ;
            public Node(String data){
                this.data = data ;
            }
            public void addNode(Node node){
                    // 新添加的节点数据大于当前判断的节点时,执行添加或右移
                if (node.data.compareTo(this.data) > 0)
                {
                    if (this.next == null)
                    {
                        this.next = node ;
                    }else if (node.data < this.next.data) 
                    {
                        // 要添加的节点数据小于当前节点的下一个节点时,表明找到了位置,直接执行添加
                        node.next = this.next ;
                        this.next = node ;
                    }else{
                        // 右移
                        this.next.addNode(node) ;
                    }
                } else {
                    // 处理添加的数据小于根节点数据的情况
                    this.next = this ;
                    this = node ;
                }
            }
        }
        private Node root ;
        public void add(String data){
            Node newNode = new Node(data) ;
            if (this.root == null)
            {
                this.root = newNode ;
            } else {
                this.root.addNode(newNode) ;
            }
        }
    }
    
    点赞 评论 复制链接分享

相关推荐