/** * 节点信息: * 内部类 */ static class Node{ String val; Node pre; Node next; public Node(String val){ this.val = val; } } /** * 头部指针 */ public Node head; /** * 尾部指针 */ public Node tail; //add /** * 方法功能: * 从头部新增 */ public void addFirst(String data){ Node node = new Node(data); if (head == null){ head = node; tail = node; return; } node.next = head; head.pre = node; head = node; } /** * 方法功能: * 从尾部新增 */ public void addLast(String data){ Node node = new Node(data); if (head == null){ head = node; tail = node; } } /** * 方法功能: * 从任意下标位置插入数据, * 第一个数据节点下标为0 * * @param index * @param data * @return */ public boolean addIndex(int index,String data){ if (index<0 || index>size()){ System.out.println("index下标位置不合法"); return false; } if (index == 0){ addFirst(data); return true; }else if (index == size()){ addLast(data); return true; } Node oldNode= get(index); Node newNode = new Node(data); newNode.pre = oldNode.pre; oldNode.pre.next = newNode; newNode.next = oldNode; oldNode.pre = newNode; return true; } //get /** * 方法功能: * 根据下标获取下标位置处的元素 * * @param index * @return */ public Node get(int index){ Node node = head; while (index != 0){ node = node.next; index--; } return node; } //contains /** * 方法功能: * 判断是否包含某个元素 * * @param key * @return */ public boolean contains(String key){ Node node = head; while (node != null){ if ((key == null && node.val == null) || key.equals(node.val)){ return true; } node = node.next; } return false; } //remove /** * 方法功能: * 从左往右,移除链表中元素为key的元素第一次出现位置的节点 * * @param key */ public void remove(String key){ Node node = head; while (node != null){ if ((key == null && node.val == null)||key.equals(node.val)){ if (node == head){ head = head.next; if (head != null){ head.pre = null; }else { tail = null; } }else { node.pre.next = node.next; if (node.next != null){ node.next.pre = node.pre; }else { tail = tail.pre; } } return; } node = node.next; } } /** * 方法功能: * 移除链表中元素为key的元素的节点 * * @param data */ public void removeAllKey(String data){ Node node = head; while (node != null){ if ((data == null && node.val == null) || data.equals(node.val)){ if (node == head){ head = head.next; if (head != null){ head.pre = null; }else { tail = null; } }else { node.pre.next = node.next; if (node.next != null){ node.next.pre = node.pre; }else { tail = tail.pre; } } } node = node.next; } } //size /** * 方法功能: * 获取链表节点长度 * * @return */ public int size(){ Node node = head; int count = 0; while (node != null){ count++; node = node.next; } return count; } //clear /** * 方法功能: * 清空链表数据 */ public void clear(){ Node node = head; while (node != null){ Node temp = node.next; node.next = null; node.pre = null; node = temp; } head = null; tail = null; }
LinkedList的自实现
最新推荐文章于 2024-07-28 19:41:52 发布