java数据结构:链表

概念:链表可以使一种有序或无序的列表,内容通常存储在内存中分散的位置上,有节点组成,每一个节点的结构都相同,节点分为数据域和链域,数据域存放内容,链域存放的是下一个节点指针。

 

基本方法实现:

 新增节点:

 

删除节点:

 

打印节点:

 

 

 

 

 

数组实现单链表:

创建节点类:Node.java

 

package LinkPackage;

/**
 * @author zh
 * 节点模型
 */
public class Node {

    String text;

    Node next;

    //头结点构造器
    public Node(){
        this.text = "";
        this.next = null;
    }

    //节点构造器
    public Node(String text){
        this.text = text;
        this.next = next;
    }

    @Override
    public String toString() {
        return "Node{" +
                "text='" + text + '\'' +
                ", next=" + next +
                '}';
    }
}

 

创建链表类:Link.java

package LinkPackage;

public class Link {
    //头结点
    private Node head;
    //构造链表
    public Link(){
        head = new Node();
    }

    //添加节点
    public void addNode(String text){
        //创建需要添加的节点
        Node node = new Node(text);
        //创建临时节点
        Node temp = head;

        while(temp.next != null){
            //将循环条件更改
            temp = temp.next;
        }
        temp.next = node;
    }

    //计算长度
    public int size(){
        int len = 0;
        Node temp = head;
        while(temp.next != null){
            len++;
            temp = temp.next;
        }
        return len;
    }

    /**
     * 打印链表节点
     */
    public void displayLink(){
        //设置临时节点
        Node temp = head;
        //开始遍历
        while(temp.next != null){
            //输出节点
            System.out.print(temp.next.text+"===>");
            //开始下一个节点
            temp = temp.next;
        }
    }

    /**
     * show 删除节点
     */
    public void delNode(String data){
        //临时节点
        Node temp = head;
        //开始循环遍历链表
        while(temp.next != null){
            //找到删除节点
            if(temp.next.text.equals(data)){
                //将链表的指针域指向下下个节点
                temp.next = temp.next.next;
                //退出循环
                break;
            }
            //不满足条件时,找到下个节点
            temp = temp.next;
        }
    }

    /**
     * show 查找节点
     */
    public Node findNode(String nodeName){
        //设置临时节点
        Node temp = head;
        //创建空节点
        Node data = null;
        //遍历链表
        while(temp.next != null){
            //查找条件符合
            if(temp.next.text.equals(nodeName)){
                //赋值
                data = temp.next;
                //退出循环
                break;
            }
            //条件不符合进行下一个节点操作,也就是改变了循环条件
            temp = temp.next;
        }
        //返回查询结果
        return data;
    }

    /**
     * show 反转单链表
     */
    public Node reverse(Node node){
        if(node == null || node.next == null){
            return node;
        }
        Node reNode = reverse(node.next);
        node.next.next = node;
        node.next = null;
        return reNode;
    }

    public static void main(String args[]){
        Link link = new Link();
        link.addNode("测试链表节点新增一");
        link.addNode("测试链表节点新增二");
        link.addNode("测试链表节点新增三");
        link.addNode("测试链表节点新增四");
        link.addNode("测试链表节点新增五");

        System.out.println(link.head);
        System.out.println("链表长度:"+link.size());
        link.displayLink();
        System.out.println();
        link.delNode("测试链表节点新增三");
        System.out.println("链表长度:"+link.size());
        link.displayLink();
        System.out.println();
        Node data = link.findNode("测试链表节点新增四");
        System.out.print(data);
        Node node = link.reverse(link.head);
        while(node.next != null){
            System.out.print(node.text+"===>");
            node = node.next;
        }
    }
}

 

posted @ 2017-11-26 19:08  古巷青砖  阅读(231)  评论(0编辑  收藏  举报