yangbo i need a girlfriend ^-^

简单链表

2017-05-10
yangbo

简单链表的实现

结构

删除和插入操作的时间复杂度是O(1),

class Node {
        private E e;
        private Node next = null;

        public Node(E e) {
            this.e = e;
        }
    }

add

直接在链表的末尾添加,因为没有下标,只能从表头遍历到尾部,然后添加。

 public void add(E e) {
        Node node = new Node(e);
        if (header == null) {
            header = node;
        } else {
            Node p = header;
            while (p.next != null) {
                p = p.next;
            }
            p.next = node;
        }
        size++;
    }

insert

插入到表的第i项后面,先循环遍历i次,再在后面插入X,调整链就可以。

public void insert(int i,E e){
        Node node = new Node(e);
        Node p = header;
        for (int j = 0; j < i; j++){
            p = p.next;
        }
        node.next = p.next;
        p.next = node;
        size++;
    }

delete

删除第i项,循环i次,找到要删除的项,调整链。

public void delete(int i){
        if (i == 0){
            header = header.next;
        }else {
            Node p = header;
            for (int j = 1; j < i; j++){
                p = p.next;
            }
            p.next = p.next.next;
        }
        size--;
    }

具体实现

package com.yb.shujujiegou.lianbiao;


/**
 * Created by 杨波 on 2017/5/2.
 */
public class MyLink<E> {

    class Node {
        private E e;
        private Node next = null;

        public Node(E e) {
            this.e = e;
        }
    }

    private Node header = null;
    private int size = 0;
    public int getSize(){
        return size;
    }
    public void dispaly() {
        Node p = header;
        while (p != null) {
            System.out.print(p.e + " ");
            p = p.next;
        }
        System.out.println();
    }

    public void addFirst(E e) {
        Node node = new Node(e);
        node.next = header;
        header = node;
        size++;
    }

    public void deleteFirst() {
        header = header.next;
        size--;
    }

    public E get(int i) {
        Node p = header;
        for (int j = 0; j < i; j++) {
            p = p.next;
        }
        return p.e;
    }

    public void add(E e) {
        Node node = new Node(e);
        if (header == null) {
            header = node;
        } else {
            Node p = header;
            while (p.next != null) {
                p = p.next;
            }
            p.next = node;
        }
        size++;
    }
    public void insert(int i,E e){
        Node node = new Node(e);
        Node p = header;
        for (int j = 0; j < i; j++){
            p = p.next;
        }
        node.next = p.next;
        p.next = node;
        size++;
    }
    public void delete(int i){
        if (i == 0){
            header = header.next;
        }else {
            Node p = header;
            for (int j = 1; j < i; j++){
                p = p.next;
            }
            p.next = p.next.next;
        }
        size--;
    }

    public void swap(int i){
        Node p = header;
        for (int j = 1; j < i; j++){
            p = p.next;
        }
        if (i == 0){
            Node n = header.next;
            header.next = header.next.next;
            n.next = header;
            header = n;
        }else {
            Node node1 = p.next;
            Node node2 = p.next.next;
            p.next = node2;
            node1.next = node2.next;
            node2.next = node1;
        }

    }
    public boolean contains(E e){
        Node p = header;
        for (int j = 0; j < size; j++){
            if (p.e == e){
                return true;
            }
            p = p.next;
        }
        return false;
    }
}


相似文章

上一篇 平衡二叉树

评论