2011-02-03 3 views
3

Я смущен относительно того, как добавить в начало связанного списка.Добавить к списку связанных

/** 
* data is added to the front of the list 
* @modifies this 
* @ffects 2-->4-->6 becomes data-->2-->4-->6 
*/ 
public void insert(E data) { 
    if (front == null) 
     front = new Node(data, null); 
    else { 
     Node temp = new Node(data, front); 
     front = temp; 
    } 
} 

Это создает цикл. Как этого избежать?

У меня есть LinkedList класс, который содержит передний узел в переменной, называемой фронтом. У меня есть класс Node в этом классе LinkedList.

Любая помощь будет оценена по достоинству. Спасибо.

+0

Это вопрос домашнего задания? Все в порядке, но если так, вы всегда должны добавить тег «домашняя работа» к вопросу. – Phrogz

+0

Как это создает цикл? – Avi

+0

Это не создает цикл. Не хотите ли вы предоставить ошибку, которую создает компилятор при попытке скомпилировать код? –

ответ

2

С моим ограниченным знанием связный список, рискну это:

Node temp = new Node(data); 
temp.next = front; 
front = temp; 

Вы можете ждать, пока кто-нибудь подтвердить, хотя.

+0

Я согласен с @takteek, это выглядит правильно, если второй аргумент относится к следующему узлу. – user183037

+0

Пробовал это тоже. Он по-прежнему создает цикл. – Catie

+0

Я не вижу ничего плохого в этой реализации метода insert, если второй аргумент является указателем на следующий узел. Вы уверены, что это вызывает цикл, а не что-то еще? – user183037

2

Я предполагаю, что конструктор Node принимает следующий указатель как второй аргумент, и в этом случае я не вижу ничего очевидного в этом коде. Это действительно звучит как вопрос о домашнем задании. Если это так, вы должны пометить его как таковой.

+0

Было бы полезно, если бы вы сказали, где происходит цикл. Что указывает на что? У вашего конструктора Node есть ошибка? – takteek

1

Это создает цикл. Как этого избежать?

Невозможно точно знать, не остальная часть кода для реализации связанного списка, но код, который вы поставили, не похож на то, что он создает цикл вообще.

Если цикл создается, он, скорее всего, создается в другом месте. В качестве альтернативы, вы/ваши тесты неправильно диагностируют какой-либо другой отказ, вызванный циклом.

Если вам нужна дополнительная помощь, напишите больше кода/доказательств ... особенно конструктор узла и код, который заставляет вас думать, что у вас есть цикл.

6

У вас нет доступа к «Следующий» узел?

В этом случае

public void insert(E data) 
{ 
    if (front == null) 
    { 
    front = new Node(data, null); 
    } 
    else 
    { 
    Node temp = new Node(data, null); 
    temp.next = front; 
    front = temp; 
    } 
} 

-

class LinkedList 
{ 
    Node front; 
    LinkedList() { front = null; } 
    public void AddToFront(String v) 
    { 
     if (front == null) 
     { 
      front = new Node(v); 
     } 
     else 
     { 
      Node n = new Node(v); 
      n.next = front; 
      front = n; 
     } 

    } 


} 

class Node 
{ 
    private String _val; 
    public Node(String val) 
    { 
     _val = val; 
    } 

    public Node next; 
} 
0

Добавить новый узел, и если нынешний глава не равно нулю, то точка текущего голову к вновь созданному узлу в качестве следующего узла ,

Node insert(Node head,int x) { 
    Node node = new Node(); 
    node.data = x; 
    if(head != null) { 
     node.next = head;} 
    return node; 
} 
0

Это моя реализация вставки узла в начало или в начало связанного списка в Java.

void insertAtHead(Object data){ 
    if(head==null) { 
     head = new Node(data); 
    } 
    Node tempNode = new Node(data); 
    Node currentNode = head; 
    tempNode.setNext(currentNode.getNext()); 
    head.setNext(tempNode); 
    incrementCounter(); 
}