java 单向链表基本操作

package 数据结构之链表增删查;

public class Node {
    String name;// 数据域
    Node next;// 链域

    public Node() {
        this.name = "";
        next = null;

    }

    public Node(String name) {
        this.name = name;
        next = null;
    }

}
package 数据结构之链表增删查;

public class Link {
    Node head;// 头结点

    public Link() {
        head = new Node();// 初始化头结点
    }

    /*
     * 添加节点,在链表的最后添加
     */
    public void add(Node data) {
        Node temp = head;
        while (temp.next != null) {
            temp = temp.next;
        }
        temp.next = data;
    }

    /*
     * 插入节点 在某个节点之后插入一个新的节点
     */
    public void insert(Node data, String newname) {
        Node temp = head;
        while (temp.next != null) {
            if (temp.next.name.equals(data.name)) {
                Node newNode = new Node(newname);
                newNode.next = temp.next.next;
                temp.next.next = newNode;
                break;
            } else {
                temp = temp.next;
            }
        }
    } /*
     * 删除节点
     */

    public void delete(Node data) {
        Node temp = head;
        while (temp.next != null) {
            if (temp.next.name.equals(data.name)) {
                temp.next = temp.next.next;
                break;
            } else {
                temp = temp.next;
            }
        }
    }

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

    /*
     * 查找数据 返回该数据的位置,返回3说明此数据在链表的第3个节点处,-1为链表中无此数据
     */
    public int serach(String name) {
        Node temp = head.next;
        int index = 0;
        while (temp != null) {
            if (temp.name.equals(name)) {
                index++;
                return index;
            }
            index++;
            temp = temp.next;
        }
        return -1;
    }

    /*
     * 遍历链表
     */
    public void display() {
        Node temp = head;
        while (temp.next != null) {
            System.out.print(temp.next.name + "->");
            temp = temp.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 创建链表
        Link link = new Link();
        // 创建节点
        Node node1 = new Node("宋江");
        Node node2 = new Node("卢俊义");
        Node node3 = new Node("吴用");
        Node node4 = new Node("林冲");
        Node node5 = new Node("李逵");
        Node node6 = new Node("燕青");
        // 链表中添加数据节点
        link.add(node1);
        link.add(node2);
        link.add(node3);
        link.add(node4);
        link.add(node5);
        link.add(node6);
        link.display();// 遍历
        System.out.println(link.size());// 6,输出链表长度
        System.out.println(link.serach("李逵"));// 5
        System.out.println(link.serach("燕"));// 不存在,返回-1
        link.insert(node4, "花荣");// 在node4"林冲"之后添加"花荣"
        link.display();// 插入数据后遍历
        link.delete(node3);// 删除节点node3"吴用"
        link.display();// 删除之后再遍历链表
        System.out.println(link.size());
    }
}

运行结果是:

宋江->卢俊义->吴用->林冲->李逵->燕青->
6
5
-1
宋江->卢俊义->吴用->林冲->花荣->李逵->燕青->
宋江->卢俊义->林冲->花荣->李逵->燕青->
6

 

菜鸟阶段,错误难免,还请多多指教!

posted @ 2017-02-28 20:27  杯酒故人  阅读(248)  评论(0编辑  收藏  举报