2015-04-28 4 views
0

У меня есть дважды связанный список, и я хочу вставить элемент в конце списка рекурсивно. У меня есть метод, который делает это без рекурсии, и он работает. Я просто не могу понять, как это сделать с рекурсией. Вставка в конце односвязного списка с рекурсией довольно понятна, я думаю, поэтому я надеюсь, что кто-то может объяснить, как это сделать, когда список дважды связан. Вот мой обычный метод вставки, что я хочу сделать рекурсивный:Рекурсивно вставлять в конец дважды связанного списка

public void insert(T element) { 
    Node in = new Node(element); 

    if (in == null) { 
     first = in; 
    } else { 
     Node tmp = first; 
     while (tmp.next != null) { 
      tmp = tmp.next; 
     } 
     tmp.next = in; 
     in.prec = tmp; 
    } 
} 
+0

Обычно, дважды связного списка есть маркер для последнего элемента, поэтому вставка в конце не требует ни цикла, ни рекурсии. – RealSkeptic

ответ

1

Идея заключается в том только, чтобы переписать время цикла с вызовом функции:

public void insert(T element) { 
    insert(element, first); // initialization 
} 

private void insert(T e, Node n) { 
    if(n == null) {   // if the list is empty 
     first = new Node(e); 
    } else if(n.next == null) {  // same condition as in the while loop 
     None newNode = new Node(e); 
     n.next = newNode; 
     newNode.prec = n; 
    } else { 
     insert(e, n.next); // looping 
    } 
} 
Смежные вопросы