Day02_Linked_侯一鸣

Task01

问题:双线链表实现线性表

双线链表实现的线性表中的, 根据内容的查找修改以及根据下标的查找和修改方法

代码

package ds.day02.Task01;

public class DemoLinkList {
    public static void main(String[] args) {
        MyDBLinkedList<String> list = new MyDBLinkedList<>();
        list.add("zs");
        list.add("ls");
        list.add("ww");
        list.add("zl");
    }
}
class MyDBLinkedList<T> {

    Node head;
    Node end;
    int size;

    public boolean add(T value) {

        if (isEmpty()) {
            head = new Node(value, null, null);
            end = head;
            size++;
            return true;
        }

        end.next = new Node(value, end, null);
        end = end.next;
        size++;

        return true;
    }

    //根据内容查找
    public boolean contains(T value) {
        if (value == null) {
            if (isEmpty()) {
                throw new RuntimeException("list is empty");
            } else {
                Node mid = head;
                while (mid != null && value != mid.value) {
                    mid = mid.next;
                }
                if (mid == null) {
                    return false;
                } else {
                    return true;
                }
            }
        } else {
            if (isEmpty()) throw new RuntimeException("list is empty");
            Node mid = head;
            while (mid != null && !value.equals(mid.value)) {
                mid = mid.next;
            }

            if (mid == null) return false;
            return true;
        }
    }

    //根据下标查找
    public T get(int index) {
        if (index < 0 || index > size) {
            throw new IllegalArgumentException("index is Illegal ");
        } else {
            int tag;
            Node mid;
            if (index < size / 2) {
                tag = 0;
                mid = head;
                while (mid != null && tag != index) {
                    tag++;
                    mid = mid.next;
                }
            } else {
                tag = size - 1;
                mid = end;
                while (mid != null && tag != index) {
                    tag--;
                    mid = mid.pre;
                }
            }
            return mid.value;
        }
    }

    //根据内容修改
    public boolean set(T oldValue, T newValue) {
        if (oldValue == null) {
            if (isEmpty()) {
                throw new RuntimeException("list is empty");
            } else {
                Node mid = head;
                while (mid != null && oldValue != mid.value) {
                    mid = mid.next;
                }
                if (mid == null) {
                    return false;
                } else {
                    mid.value = newValue;
                    return true;
                }
            }
        } else {
            if (isEmpty()) {
                throw new RuntimeException("list is empty");
            } else {
                Node mid = head;
                while (mid != null && !oldValue.equals(mid.value)) {
                    mid = mid.next;
                }
                if (mid == null) {
                    return false;
                } else {
                    mid.value = newValue;
                    return true;
                }
            }
        }
    }

    //根据下标修改
    public T set(int index, T newValue) {
        if (index < 0 || index > size) {
            throw new IllegalArgumentException("index is Illegal ");
        } else {
            int tag;
            Node mid;
            if (index < size / 2) {
                tag = 0;
                mid = head;
                while (mid != null && tag != index) {
                    tag++;
                    mid = mid.next;
                }
            } else {
                tag = size - 1;
                mid = end;
                while (mid != null && tag != index) {
                    tag--;
                    mid = mid.pre;
                }
            }
            T oldValue = mid.value;
            mid.value = newValue;
            return oldValue;
        }
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public int size() {
        return size;
    }

    class Node {
        T value;
        Node pre;
        Node next;

        public Node(T value, Node pre, Node next) {
            this.value = value;
            this.pre = pre;
            this.next = next;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值