单个类中的单个链表实现

时间:2014-01-24 07:09:17

标签: java

我有以下代码,但我不理解w.next = nextnode这一行; 这是什么意思? 我的代码似乎很复杂,或者是否有最简单的方法来实现它 有什么建议或想法吗?

class Node1{
    private String data;
    private Node1 nextNode=null;
    private Node1 lastnode=null;
    private Node1 next=null;
    public Node1()
     {

     }
     public Node1(String r)
     {
       data=r;  
     }
     public void displayitems()
     {
         System.out.println(data);
     }
    public void insert(String data){

     Node1 w=new Node1(data);
     if(w==null)
     {
        lastnode=w;
}
else
{
 w.next=nextNode;
 nextNode=w;
}
     }   
    }

    public void display()
    {
        System.out.println("Items in list");
        Node1 current=nextNode;
      current.displayitems();
    }

    public static void main(String[] arg){
      Node1 a=new Node1();
      a.insert("deepak");
      a.insert("deep");
      a.display();


        }
    }

1 个答案:

答案 0 :(得分:1)

首先,您尝试实现自己的一些数据结构是件好事。但是如果你需要实现这样的东西,你需要深入分析数据结构(在你的情况下为Singly LinkedList)如何存储和检索数据&是否维持插入顺序或维持排序顺序等。

  

建议您在做之前始终遵循一些要点   实施

     
      
  1. 首先了解这个概念。
  2.   
  3. 写下算法,了解它的工作原理。
  4.   
  5. 设计它(可能在纸上写下设计是最好的做法,并且会让你清楚地看到你实施的内容)
  6.   
  7. 实施&测试一下。
  8.   

在这种情况下,您为链接列表设计了一个Node类,它将处理所有与节点相关的任务,例如存储下一个/上一个节点地址(SinglyLinkedList将只存储下一个节点地址)。将此节点保持为LinkedList类的Inner class(最佳实践)。

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

        public Node(T data, Node<T> next){
            this.data = data;
            this.next = next;
        }
    }

我在这里使用了Generics。你也可以不使用泛型来做到这一点。在遍历这些Node对象的linkedlist类中实现链接列表操作(如添加/删除等)。无论你写下什么算法,都可以帮助你在这些地方以有效的方式实施。

我的示例代码在这里。无论你在这里发布什么代码都不是一个好的实现。请按照我指定的步骤进行操作。你会得到更好的代码。

public class LinkedList<T> {

    private Node<T> head;
    private Node<T> nextNode;
    private int size = 0;

    public void addFirst(T element){
        head = new Node<T>(element, head);
    }

    public void add(T element){
        if(head == null)
            addFirst(element);
        else{
            Node<T> node = head;
            while(node.next != null){
                node = node.next;
            }
            node.next = new Node<T>(element, null);
        }
        size++;
    }

    public int size(){
        return size;
    }

// Inner class somewhere here
}

这是一个简单的表示。你可以实现Iterable&amp; Iterator接口遍历列表。