2014-10-31 5 views
0

Я создаю отдельный связанный круговой список, и я, кажется, не понимаю, почему он не работает. Вот мой код. Кто-нибудь поможет мне и укажет, что я делаю неправильно? Я могу добавить первый узел, но я не понимаю, как добавить второй узел. Может ли кто-нибудь показать мне, как его изменить. Я думаю, что мой список проходит бесконечно, поэтому.Единственный Связанный Циркуляр Список Добавить метод

public class CircularList <E> { 
     private Node<E> head; 

     private class Node <E> 
     { 
      E data; 
      Node <E> next; 

      public Node(E data, Node<E> next) 
      { 
      this.data = data; 
      this.next = next; 
      } 
      public Node(E data) 
      { 
      this.data = data; 
      this.next = null;   
      } 
     }//node 
     public CircularList() 
     { 
      head = null; 

     } 

     public void add(E data) 
     { 
      Node <E> temp = new Node <E> (data); 
      if(head==null) 
      { 
       head=temp; 
       temp.next=temp; 
       System.out.println(head.next.data); 
      } 
      else 
      { 
       Node<E> temp2 = head.next; 
       while(temp2!=head) 
       { 
        if(temp2.next==head) 
        { 
         temp2.next=temp; 
         temp.next=head; 
        } 
        temp2=temp2.next; 
       } 

      } 
     } 
+1

Проблемы в том, что после добавления первого узла вы обнаружите, что head == head.next, который в основном является проверкой, которую вы делаете в то время. Если не быть частью цикла, просто используйте while для перемещения в последнем узле и сделайте добавление снаружи. – XecP277

ответ

0

Обновите свою часть;

  Node<E> temp2 = head; 
      while(temp2.next != head) 
      { 
       temp2=temp2.next; 
      } 
      temp2.next=temp; 
      temp.next=head; 
+0

Спасибо. это сработало. А также я должен создать метод метода remove, который удаляет элемент по указанному индексу. Я не знаю, как с этим бороться. – Koolkirtzz

+0

Сделайте это так же, как метод add, просто подсчитайте количество элементов, а затем удалите элемент по этому индексу. Будьте осторожны с краями. –

0

Если вы хотите сделать свой односвязанны список циркуляр, было бы неплохо иметь хвост, то ваш код может быть что-то вдоль линий (псевдо-код)

function addElement(data){ 

    Node n = new Node(data) 

    if(list.isEmpty()){ 
     head = n 
     tail = n 
     n.setNext(n) 
    } else { 
     n.setNext(head) 
     tail.setNext(n) 
     head = n 
    } 
} 
Смежные вопросы