2015-10-10 1 views
0

Проблема я столкнулся является выяснение того, как написать методСкопировать в один список с параметром (Node <E> узел)

public SingleLinkedList copy(Node <E> node) { 

} 

Чтобы вернуть копию списка. Я пробовал:

public SingleLinkedList copy(Node <E> node) { 
SingleLinkedList<E> temp = new SingleLinkedList<E>(); 
Node<E> ref = head; 
    for(Node<E> n = ref ;ref!= null; n = n.next){ 
    temp.add(n, ref.data); 
    ref = ref.next; 
} 
    return temp; 
} 

Я создал новый список под названием темп, изменил голову, реф, итерацию по списку и добавьте его в новый список и возвращает новый список, но есть ошибка с temp.add(n, ref.data).

Что я могу сделать неправильно?

class SingleLinkedList<E> { 

private static class Node<E> { 
    private E data;//removed final * private final E data 
    private Node<E> next; 

    private Node(E item) { 
     data = item; 
    } 
} 

private Node<E> head; 
private int size; 

/* Insert item at index, returns true if add is successful. */ 
public boolean add(int index, E item) { 
    if (index < 0 || index > size) { 
     throw new IndexOutOfBoundsException("" + index); 
    } 

    if (index == 0) { // adding to the front 
     Node<E> t = head; 
     head = new Node<>(item); 
     head.next = t; 
    } else { // adding anywhere other than front 
     Node<E> left = getNode(index - 1); 
     Node<E> node = new Node(item); 
     Node<E> right = left.next; 
     left.next = node; 
     node.next = right; 
    } 
    size++; 
    return true; 
} 

/* Add item at end of list, returns true if successful. */ 
public boolean add(E item) { 
    return add(size, item); 
} 

/* Return item at index */ 
public E get(int index) { 
    if (index < 0 || index >= size) { 
     throw new IndexOutOfBoundsException("" + index); 
    } 
    return getNode(index).data; 
} 

/* Return the number of items */ 
public int size() { 
    return size; 
} 

/* Returns a string representation of the list */ 
@Override 
public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("[ "); 
    for (Node<E> n = head; n != null; n = n.next) { 
     sb.append(n.data); 
     sb.append(" "); 
    } 
    sb.append("]"); 
    return sb.toString(); 
} 

/* Return the node at location index */ 
private Node<E> getNode(int index) { 
    Node<E> n = head; 
    for (int i = 0; i < index; i++) 
     n = n.next; 
    return n; 
} 
+0

Тип 'n' -' Node ', однако для метода' add' ожидается 'int'. Хотя я вполне уверен, что компилятор также сказал вам об этом. Почему даже параметр для метода копирования? – mcserep

+0

Профессор хочет сделать это сложнее на нас. Думаю. Полагаю, что это становится труднее понять. – andy

ответ

0

Проблема в том, что вам необходимо передать позицию в виде int. Я также удалил Node n, потому что вам это не нужно. Я думаю, что это должно сработать.

public SingleLinkedList copy() { 
    SingleLinkedList<E> temp = new SingleLinkedList<E>(); 
    int i = 0; 
    for(Node<E> ref = head ;ref!= null; ref = ref.next){ 
     temp.add(i++, ref.data); 
    } 
    return temp; 
} 

EDIT: Я забыл сбросить параметр, в котором он вам вообще не нужен.

+0

public static void main (String [] args) { \t SingleLinkedList l = новый SingleLinkedList <>(); \t для (int i = 0; i <10; i ++) \t \t l.add (i); } Как я могу проверить это в основном? Это основной метод со списком. – andy

+0

удалите параметр из метода копирования, и вы можете назвать это следующим образом: SingleLinkedList b = l.copy(); – Napster2202