递归地在单链表的特定位置插入节点时,如何输出正确的链表?

时间:2019-03-25 00:48:01

标签: java

我试图递归地实现它,但是它没有返回带有所有正确节点的正确链表。

我尝试在递归调用之后打印出该节点,但是这给了我反向的正确链表,但是由于某种原因,当我返回不起作用的head时。

public Node<E> insertNodeAtPosition(Node<E> head,E element,int position)
  {
     Node<E> node = new Node<E>(element,null);
         if(head==null){
           return node;
         }

        if(position==0)
        {
           Node<E> current = head;
           head = node;
           head.next = current;
        }  

       insertNodeAtPosition(head.next,element,position-1);


       return head;
     }

我希望输出包含插入的节点,但是它不会出现在其中

1 个答案:

答案 0 :(得分:0)

此代码:

public static <E> Node<E> insertNodeAtPosition(Node<E> head, E element, int position) {
    return insertNodeAtPosition(null, head, element, position);
}

private static <E> Node<E> insertNodeAtPosition(Node<E> prev, Node<E> head, E element, int position) {
    if (position == 0) {
        Node<E> newNode = new Node<>(element, null);

        if (prev != null) {
            prev.next = newNode;
        }

        newNode.next = head;

        return newNode;
    }

    return insertNodeAtPosition(head, head.next, element, position - 1);
}

将返回新插入的节点。

编辑:不使用其他方法:

private static <E> Node<E> insertNodeAtPosition(Node<E> prev, Node<E> head, E element, int position) {
    if (position == 0) {
        Node<E> newNode = new Node<>(element, null);

        if (prev != null) {
            prev.next = newNode;
        }

        newNode.next = head;

        return newNode;
    }

    return insertNodeAtPosition(head, head.next, element, position - 1);
}