在java中实现链表结构 - 源代码

lianjin 1月前 31

  • 此代码只是诠释了链表结构
  • 很多情况下会出现bug 比如说 多线程

实现效果

  • 添加

  • 删除


UseDemo.java

package sx.java;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;

public class UseDemo {
    private static Logger logger = LoggerFactory.getLogger(UseDemo.class);

    public static void main(String[] args) {
        LinkedListDiy<String> linkedListDiy = new LinkedListDiy<String>();

        linkedListDiy.add("str1");
        linkedListDiy.add("str2");
        linkedListDiy.add("str3");

        logger.debug("链表初始化完成");
        linkedListDiy.remove("str2");
        logger.debug("删除链表成员完成");
    }
}

LinkedBean.java

package sx.java;

/**
 * 单链表节点实例
 *
 * @param <T>
 */
public class LinkedBean<T> {
    /**
     * 上一个节点
     */
    private LinkedBean<T> previous;
    /**
     * 节点值
     */
    private T value;
    /**
     * 下一个节点
     */
    private LinkedBean<T> next;

    public LinkedBean<T> getPrevious() {
        return previous;
    }

    public void setPrevious(LinkedBean<T> previous) {
        this.previous = previous;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    public LinkedBean<T> getNext() {
        return next;
    }

    public void setNext(LinkedBean<T> next) {
        this.next = next;
    }

}

LinkedListDiy.java

package sx.java;

/**
 * 链表操作类
 *
 * @param <T>
 */
public class LinkedListDiy<T> {

    private LinkedBean<T> linkedBean;

    public LinkedListDiy() {
        linkedBean = new LinkedBean<T>();
    }

    /**
     * 对外提供 增加链表成员方法
     *
     * @param addVal
     */
    public void add(T addVal) {

        if (linkedBean.getValue() == null) {
            linkedBean.setValue(addVal);
        } else {
            addBeanToLinkedBean(addVal);
        }
    }

    /**
     * 增加链表成员到最尾部
     *
     * @param addVal
     */
    private void addBeanToLinkedBean(T addVal) {
        LinkedBean<T> addBean = new LinkedBean<T>();
        addBean.setValue(addVal);
        LinkedBean<T> nextBean = linkedBean.getNext();
        LinkedBean<T> lastBean = linkedBean;
        while (nextBean != null) {
            lastBean = nextBean;
            nextBean = nextBean.getNext();
        }
        if (lastBean == null) {
            throw new RuntimeException("增加链表成员报错!");
        } else {
            lastBean.setNext(addBean);
            addBean.setPrevious(lastBean);
        }
    }

    /**
     * 根据传入的对象的值 在链表中进行删除
     *
     * @param t
     */
    public void remove(T t) {
        if (linkedBean.getValue() == null) {
            return;
        }
        LinkedBean<T> nextBean = linkedBean;
        while (nextBean != null) {
            if (nextBean.getValue().equals(t)) {
                if (nextBean.getPrevious() == null) {
                    //如果该节点上一个节点为null 说明当前节点为第一个节点
                    nextBean.setValue(null);
                    if (nextBean.getNext() != null) {
                        LinkedBean<T> next = nextBean.getNext();
                        next.setPrevious(null);
                        linkedBean = next;
                    }
                } else {
                    // 把 上一个节点中存储的  下一个节点 直接 移到  当前节点的 下一个节点
                    nextBean.getPrevious().setNext(nextBean.getNext());
                    // 把 下一个节点中储存的 上一个节点 直接 移到 当前节点的上一个节点
                    if (nextBean.getNext() != null) {
                        nextBean.getNext().setPrevious(nextBean.getPrevious());
                    }
                }
                break;
            } else {
                nextBean = nextBean.getNext();
            }
        }
    }

}
最后于 1月前 被lianjin编辑 ,原因:
最新回复 (0)
    • Deep♂Dark♂Fantastic
      2
        立即登录 立即注册 
返回