Java程序设计之链表结构

  唉,说点废话,昨天偶尔看到一年前自己用C解约瑟夫环问题的循环链表,唏嘘不已,想想自己一年前嵌入式的梦呢,这两天发生了许多,而有些人不在了就真的不在了,心情不好,不多说了,直接上代码,只是些链表的基本操作,花些功夫看就好了。

  首先,建立一个Node类,里面内构一个Node对象和数据(用来区分);

public class Node {
    protected Node next; //指针
    protected int data;  //数据
    
    
    public Node(int data){
        this.data = data;
    }
    
    //显示节点
    public void display(){
        System.out.println(data+" ");
    }
}

  然后创建一个LinkList类,里面包含了链表的一些基本方法,

public class LinkList {
    public Node first;  //定义一个头结点
    
    public LinkList(){
        this.first = null;
    }
    
    //插入一个头结点
    public void addFirstNode(int data){
        Node node = new Node(data);
        node.next = first;
        first = node;
    }
    
    //删除一个头节点,并返回头结点
    public Node deleteFirstNode(){
        Node tempNode = first;
        first = tempNode.next;
        return first;
    }
    
    //在替换掉index后面的节点。
    public void add(int index , int data){
        Node node = first;
        Node current = first;
        while(index-->0){
            current = node.next;
            node = current;
        }
        current.data = data;
    }
    
    //在第index节点后面插入节点
    public void Insert(int index , int data){
        Node node = new Node(data);
        Node current = first;
        Node privious = first;
        while(index-->0){
            privious = current;
            current = current.next;
        }
        node.next = current;
        privious.next = node;
    }
    
    //删除任意位置的节点
    public void delete(int index){
        Node current = first;
        Node privious = first;
        while(index-->0){
            privious = current;
            current = current.next;
        }
        if(current == first){
            first = first.next;
        }else{
            privious.next = current.next;
        }
    }
    
    //根据data的值删除节点,删除找到的第一个节点
    public void deleteData (int data){
        Node privious = first;
        Node current = first;
        while(current.data!=data){
            privious = current;
            current = current.next;
        }
        if(current == first){
            first = first.next;
        }else{
            privious.next = current.next;
        }
    }
}

  再建立一个主类,

public class TestLink {
    public static void main(String[] args){
        LinkList l = new LinkList();
        l.addFirstNode(1);
        l.addFirstNode(2);
        l.addFirstNode(3);
        Node node = l.first;
        l.Insert(2, 5);
        l.deleteData(5);
        while(node!=null){
            node.display();
            node = node.next;
        }
    }
}

  实在是没有心情继续写了,希望以后会好点,2015年8月9日18:55分。

posted @ 2015-08-09 18:57  朱向西  阅读(342)  评论(0编辑  收藏  举报