单链表定义和工具类实现

本文内容如有错误、不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢。

  • 描述:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置), 元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
  • 本质:一种链式存取的数据结构

定义:

package algorithm;

/**
 * 单链表
 * 描述:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
 * 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),
 * 元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
 * 本质:一种链式存取的数据结构
 */
public class ListNode<T> {
    // 下一个节点
    ListNode<T> next;
    // 节点数据
    T data;

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

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

工具类实现:

package algorithm;

/**
 * 单链表工具类
 */
public class ListNodeUtil {

    /**
     * 查找
     * @param nodes 单链表数据
     * @param value 查找数据
     */
    public boolean select(ListNode<Integer> nodes, Integer value) {
        ListNode<Integer> currNode = nodes;
        while (currNode.getNext() != null) {
            if (currNode.getData().equals(value)) {
                return true;
            }
            currNode = currNode.getNext();
        }
        return false;
    }

    /**
     * 删除
     * @param nodes 单链表数据
     * @param value 删除链表中存在该数据的节点
     * @return 删除后的单链表
     */
    public ListNode<Integer> deleted(ListNode<Integer> nodes, Integer value){
        // 先决判断条件
        if (nodes == null) {
            return null;
        }
        ListNode<Integer> curr = nodes;
        ListNode<Integer> next = nodes.getNext();
        // 标示位 默认没有找到
        boolean flag = false;
        while (next != null) {
            if (value.equals(next.getData())) {
                flag = true;
                break;
            }
            curr = next;
            next = next.getNext();
        }

        if (flag) {
            curr.setNext(next.getNext());
            next.setNext(null);
            next = null;
        }

        return nodes;
    }

    /**
     * 增加
     */
    public ListNode<Integer> add(ListNode<Integer> nodes, int index, Integer value) {
        // 判断index 是否符合逻辑
        if (index < 0) {
            throw new IndexOutOfBoundsException("索引越界异常:"+index);
        }

        // 定位到前一个节点
        ListNode<Integer> perNode = nodes;
        for (int i = 0; i < index; i++) {
            perNode = perNode.getNext();
        }

        // 创建一个新节点
        ListNode<Integer> newNode = new ListNode<Integer>();
        newNode.setData(value);
        newNode.setNext(perNode.getNext());
        perNode.setNext(newNode);
        return nodes;
    }
}

发布了56 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/feng_xiaoshi/article/details/103442304