Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取自定义链表的方法、插入和移除At方法_Java_Linked List_Nodes_Singly Linked List - Fatal编程技术网

Java 获取自定义链表的方法、插入和移除At方法

Java 获取自定义链表的方法、插入和移除At方法,java,linked-list,nodes,singly-linked-list,Java,Linked List,Nodes,Singly Linked List,在我创建的自定义链表中实现这三种方法时,我遇到了很多麻烦。get(int pos)方法将为除第0个索引以外的所有索引返回null,即使我有一个现有的链表!我的removeAt(intpos)和insert(intpos,intn)方法也有同样的问题。我会包括所有我认为相关的内容 我的节点类 public class MyNode { public int cargo; public MyNode next; public MyNode()

在我创建的自定义链表中实现这三种方法时,我遇到了很多麻烦。get(int pos)方法将为除第0个索引以外的所有索引返回null,即使我有一个现有的链表!我的removeAt(intpos)和insert(intpos,intn)方法也有同样的问题。我会包括所有我认为相关的内容

我的节点类

    public class MyNode 
   {
      public int cargo;
      public MyNode next;

      public MyNode()
      {
        cargo = 0;
        next = null;
      }

      public MyNode(int i)
      {
        cargo = i;
        next = null;
      }
   }
我的自定义链接列表

public class MyLinkedList 
{
MyNode head;
int size;

public MyLinkedList()
{
    head = null;
    size = 0;
}

public int get(int pos)
{
    MyNode current = new MyNode();
    for(int i = 0; i <= pos && current != null; i++)
    {
        if(pos == 0){
            current = head;
        }else{
            current = current.next;
            break;
        }
    }
    return current.cargo;
}

public void insert(int pos, int n)
{
    MyNode current = new MyNode(n);
    MyNode before = new MyNode(get(pos-1));
    if(before.next != null)
    {
        before.next = current.next;
    }
    else
    {
        before.next = current;
    }
    size++;
    System.out.println("Inserted " + n + " at position " + pos);
}
public void removeAt(int pos)
{
    MyNode before = new MyNode(get(pos -1));
    MyNode remove = new MyNode(get(pos));
    MyNode after = null;

    int cargo = remove.cargo;

    if(remove.next != null)
    {
        after = remove.next;
    }
    before.next = after;
    size--;
    System.out.println("Removed " + cargo + " from position " + pos);
}
}

在sysout返回空指针异常,因为您创建的项目太多<代码>插入正在创建2项,只需要第一项
removeAt
正在创建另外两个节点。。其中大部分需要移除

进行以下更改并再次测试

MyNode before = get(pos-1);

MyNode before = get(pos -1);
MyNode remove = get(pos);
编辑:。。偶数
MyNode current=newmynode()get
中的code>


编辑:您的核心问题是
get
返回数据而不是元素,您应该编写一个返回
节点的版本,并在所有内部方法中使用该版本,如上所述。当前的方法是创建新节点,这些节点由于未正确插入列表而立即被销毁

好吧,关于你的
get
问题,如果
pos!=0

此外,您的列表退出条件是错误的。它应该是
而不是

MyNode before = get(pos-1);

MyNode before = get(pos -1);
MyNode remove = get(pos);