2014-02-07 2 views
0

Попытка реализовать single-linked-list в нижеприведенной программе, я действительно не могу понять, как добавить узел в Связанный список (для начала, m попробовать его на пустым связанным списком).Добавить узлы в связанном списке

Говоря простым простым, я пытался setData и setNext но getSizeofList() возвращение 0 каждый раз .... его действительно выглядит как ракетостроение мне сейчас !!

Вопрос: Может кто-нибудь сказать мне, как реализовать это .... или, вернее, добавить узел в существующий связанный список ....

Что я пытался до сих пор, и почему они dint отработано: Я ссылался на несколько программ, но они были слишком сложны для меня, чтобы понять (rocket science), поэтому написала ниже программу из того, что я понял из алгоритмов .... но даже в algo's они просто показывают методы о том, как для реализации, и это то, где я потерпел неудачу, поскольку, я не понимаю, что data-type и value должны быть переданы для добавления узла ...


пожалуйста, не то, что м не ява парень, поэтому, пожалуйста, идти легко, этот вопрос приходит как попытка узнать

package Data_S; 

public class Linked_List { 

    private int data; 
    private Linked_List next_ptr; 
    private Linked_List headNode = null; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Linked_List ll = new Linked_List(); 
     //ll.setnext(25); 
     ll.insert_node(24); 
     ll.traverse(); 
     ll.getSizeofList(); 
    } 


    //size of list 
    public void getSizeofList() 
    { 
     int l = 0; 
     Linked_List curr = headNode; 
     while(curr != null) 
     { 
      l++; 
      curr = curr.getnext(); 
     } 
     System.out.print("Size of list is = "+l); 
    } 

    //insert node 
    public void insert_node(/*Linked_List node, */int data) 
    { 
     if(headNode == null) 
     { 
      System.out.println("in insert"); // checking 
      this.setnext(headNode); 
      this.setData(data); 
      System.out.print("value = "+this.getData()); 
     } 
    } 

    //set data for this node 
    public void setData(int data) 
    { 
     this.data = data; 
    } 

    //return the data 
    public int getData() 
    { 
     return this.data; 
    } 

    //set next pointer 
    public void setnext(Linked_List next_ptr) 
    { 
     this.next_ptr = next_ptr; 
    } 

    //get next pointer 
    public Linked_List getnext() 
    { 
     return this.next_ptr; 
    } 


} 
+0

Это хорошо, что вы пытаетесь узнать, но есть сотни описаний на связанных списков в книгах и на веб-сайтах. Что именно вы не понимаете о том, как работает вставка? – Joni

+0

@Joni: я не могу представить, как это распределено в памяти .... как 'массивы', они просты, так как у них нет указателей' next' и 'fwd' только непрерывный блок ... .. Чтобы ответить на ваш вопрос, я не понимаю, как один блок данных может иметь «указатели» в Java, чтобы он мог быть прикреплен ..... Я просто хочу понять, как это так называлось «предыдущее/next' указатели java находятся в памяти и как они работают !! – NoobEditor

+1

@NoobEditor: данные распределяются в отдельных местах, не связанных с другими данными. Для каждого узла вы выделяете достаточно места для 3 указателей, которые указывают на 3 абстрактных точки в памяти, которые содержат предыдущий узел, следующий узел и данные текущего узла. –

ответ

1

Вы должны провести различие между отдельными цепями (Node) из связанного списка, и весь контейнер (LinkedList).

public class LinkedList { 
    Node head; 
    int size; // Maybe 

    public void insertAtEnd(int data) { 
     Node previous = null; 
     for (Node current = head; current != null; current = current.next) { 
      previous = current; 
     } 
     Node baby = new Node(data); 
     if (previous == null) { 
      head = baby; 
     } else { 
      previous.next = baby; 
     } 
     ++size; 
    } 

    public void insertInSortedList(int data) { 
     Node previous = null; 
     Node current = null; 
     for (current = head; current != null && data < current.data; 
       current = current.next) { 
      previous = current; 
     } 
     Node baby = new Node(data); 
     baby.next = current; 
     if (previous == null) { 
      head = baby; 
     } else { 
      previous.next = baby; 
     } 
     ++size; 
    } 
} 

class Node { 
    int data; 
    Node next; 
    Node(int data) { 
     this.data = data; 
    } 
} 

Можно иногда видеть инкапсуляция как:

public class LinkedList { 
    private static class Node { 
    } 
    ... 
} 
+0

+1: ничего себе .... 'вам нужно сделать различие между единственными цепями, очищенными почти всеми сомнениями .... спасибо большое, ответ принят !!! :) – NoobEditor

0

Вы никогда не ступала headnode. В insertnode вы просто используете setnext, который не устанавливает headnode. Вы смешиваете верхний класс и реализацию узла вместе.

Вот пример того, как реализовать связанный список в Java для дальнейшего использования: How do I create a Linked List Data Structure in Java?

+0

Я видел эту ссылку ссылки и принятый ответ .... но последующие комментарии в этом ответе поставили меня на сомнение !! : \ – NoobEditor

Смежные вопросы