Java 链表-在当前节点之前插入节点

Java 链表-在当前节点之前插入节点,java,insert,linked-list,singly-linked-list,Java,Insert,Linked List,Singly Linked List,我正在尝试一个方法,该方法将在链表中的当前节点之前插入传递给它的节点。它有3个条件。对于这个实现,不能有任何头节点(仅引用列表中的第一个节点),并且我不能添加更多变量 如果列表为空,则将传递的节点设置为列表中的第一个节点 如果当前节点位于列表的前面。如果是,请将传递的节点设置为当前节点旁边的节点,并将第一个节点设置为传递的节点,以将其移动到前面 如果列表不为空且当前节点不在前面,则迭代列表,直到本地节点等于列表的当前节点。然后我执行与2相同的指令 这是我的密码 public class Link

我正在尝试一个方法,该方法将在链表中的当前节点之前插入传递给它的节点。它有3个条件。对于这个实现,不能有任何头节点(仅引用列表中的第一个节点),并且我不能添加更多变量

  • 如果列表为空,则将传递的节点设置为列表中的第一个节点
  • 如果当前节点位于列表的前面。如果是,请将传递的节点设置为当前节点旁边的节点,并将第一个节点设置为传递的节点,以将其移动到前面
  • 如果列表不为空且当前节点不在前面,则迭代列表,直到本地节点等于列表的当前节点。然后我执行与2相同的指令 这是我的密码

    public class LinkedList 
    {
    private Node currentNode;
    private Node firstNode;
    private int nodeCount;
    
    public static void main(String[] args)
     {
     LinkedList test;
     String dataTest;
     test = new LinkedList();
     dataTest = "abcdefghijklmnopqrstuvwxyz";
     for(int i=0; i< dataTest.length(); i++) { test.insert(new String(new char[] { dataTest.charAt(i) }));  }
     System.out.println("[1] "+ test);
    
      for(int i=0; i< dataTest.length(); i++) { test.deleteCurrentNode(); }
      System.out.println("[2] "+test);
    
      for(int i=0; i< dataTest.length(); i++)
      {
      test.insertBeforeCurrentNode(new String(new char[] { dataTest.charAt(i) }));
       if(i%2 == 0) { test.first(); } else { test.last(); }
      }
    
      System.out.println("[3] "+test);
     }
    
    public LinkedList()
    {
        setListPtr(null);
        setCurrent(null);
        nodeCount = 0;
    }
    
    public boolean atEnd()
    {
        checkCurrent();
        return getCurrent().getNext() == null;
    }
    
    public boolean isEmpty()
    {
        return getListPtr() == null;
    }
    
    public void first()
    {
        setCurrent(getListPtr());
    }
    
    public void next()
    {
        checkCurrent();
        if (atEnd()) {throw new InvalidPositionInListException("You are at the end of the list. There is no next node. next().");}
        setCurrent(this.currentNode.getNext());
    }
    
    public void last()
    {
        if (isEmpty()) {throw new ListEmptyException("The list is currently empty! last()");}
    
        while (!atEnd())
        {
            setCurrent(getCurrent().getNext());
        }
    
    }
    
    public Object getData()
    {
        return getCurrent().getData();
    }
    
    public void insertBeforeCurrentNode(Object bcNode) //beforeCurrentNode
    {
        Node current;
        Node hold;
        boolean done;
        hold = allocateNode();
        hold.setData(bcNode);
        current = getListPtr();
        done = false;
        if (isEmpty())
        {
            setListPtr(hold);
            setCurrent(hold);       
        }
    
        else if (getCurrent() == getListPtr())
        {
            System.out.println("hi" + hold);
            hold.setNext(getCurrent());
            setListPtr(hold);
        }
    
        else //if (!isEmpty() && getCurrent() != getListPtr())
        {
            while (!done && current.getNext() != null)
            {
                System.out.println("in else if " + hold);
                if (current.getNext() == getCurrent())
                {
                    //previous.setNext(hold);
                    //System.out.println("hi"+ "yo" + " " + getListPtr());
                    hold.setNext(current.getNext());
                    current.setNext(hold);
                    done = true; 
                }
    
                //previous = current;
                current = current.getNext();
            }
    
        }
        System.out.println(getCurrent());
    
    }
    
    public void insertAfterCurrentNode(Object acNode) //afterCurrentNode
    {
        Node hold;
        hold = allocateNode();
        hold.setData(acNode);
        if (isEmpty())
        {
            setListPtr(hold);
            setCurrent(hold);
            //System.out.println(hold + " hi");
        }
    
        else 
        {
            //System.out.println(hold + " hia");
            hold.setNext(getCurrent().getNext());
            getCurrent().setNext(hold);
        }
    }
    
    public void insert(Object iNode)
    {
        insertAfterCurrentNode(iNode);
    }
    
    public Object deleteCurrentNode()
    {
        Object nData;
        Node previous; 
        Node current;
        previous = getListPtr();
        current = getListPtr();
        nData = getCurrent().getData();
    
        if (isEmpty()) {throw new ListEmptyException("The list is currently empty! last()");}
    
        else if (previous == getCurrent())
        {
            getListPtr().setNext(getCurrent().getNext());
            setCurrent(getCurrent().getNext());
            nodeCount = nodeCount - 1;
        }
    
        else 
        {
            while (previous.getNext() != getCurrent())
            {
                previous = current;
                current = current.getNext();
    
    
            }
        previous.setNext(getCurrent().getNext());
        setCurrent(getCurrent().getNext());
        nodeCount = nodeCount - 1;  
        }
        return nData;
    }
    
    public Object deleteFirstNode(boolean toDelete)
    {
        if (toDelete)
        {
            setListPtr(null);
        }
        return getListPtr();
    }
    
    public Object deleteFirstNode()
    {
        Object deleteFirst;
        deleteFirst = deleteFirstNode(true);
        return deleteFirst;
    }
    
    public int size()
    {
        return this.nodeCount;
    }
    
    public String toString()
    {
        String nodeString;
        Node sNode;
        sNode = getCurrent();
        //System.out.println(nodeCount);
        nodeString = ("List contains " + nodeCount + " nodes");
        while (sNode != null)
        {
            nodeString = nodeString + " " +sNode.getData();
            sNode = sNode.getNext();
        }   
        return nodeString;
    }
    
    private Node allocateNode()
    {
        Node newNode;
        newNode = new Node();
        nodeCount = nodeCount + 1;
        return newNode;
    }
    
    private void deAllocateNode(Node dNode)
    {
        dNode.setData(null);
    }
    
    private Node getListPtr()
    {
        return this.firstNode;
    }
    
    private void setListPtr(Node pNode)
    {
         this.firstNode = pNode;
    }
    
    private Node getCurrent()
    {
        return this.currentNode;
    }
    
    private void setCurrent(Node cNode)
    {
        this.currentNode = cNode;
    }
    
    private void checkCurrent()
    {
        if (getCurrent() == null) {throw new InvalidPositionInListException("Current node is null and is set to an invalid position within the list! checkCurrent()");}
    }
    
    /**NODE CLASS ----------------------------------------------*/
    
        private class Node 
        {
            private Node next; //serves as a reference to the next node 
            private Object data;
    
            public Node()
            {
                this.next = null;
                this.data = null;
            }
    
    
            public Object getData()
            {
                return this.data;
            }
    
            public void setData(Object obj)
            {
                this.data = obj;
            }
    
            public Node getNext()
            {
                return this.next;
            }
    
            public void setNext(Node nextNode)
            {
                this.next = nextNode;
            }
    
            public String toString()
            {
                String nodeString;
                Node sNode;
                sNode = getCurrent();
                //System.out.println(nodeCount);
                nodeString = ("List contains " + nodeCount + " nodes");
                while (sNode != null)
                {
                    nodeString = nodeString + " " +sNode.getData();
                    sNode = sNode.getNext();
                }   
                return nodeString;
            }
        }
    
     }
    
    公共类链接列表
    {
    私有节点currentNode;
    私有节点firstNode;
    私有int节点计数;
    公共静态void main(字符串[]args)
    {
    链接列表测试;
    字符串数据测试;
    test=新建LinkedList();
    dataTest=“abcdefghijklmnopqrstuvxyz”;
    对于(inti=0;isNode = getCurrent();
    
    sNode = getListPtr();
    
    Node previous = null;
    Node current = first;
    while (current != null && current.getValue() != searchedValue) {
        previous = current;
        current = current.getNext();
    }
    previous.setNext(newNode);
    newNode.setNext(current);