时间:2021-05-19
临近春节,项目都结束了,都等着回家过年了。下面是小编给大家研究数据结构的相关知识,链表算是经常用到的一种数据结构了,现将自己的实现展示如下,欢迎大神赐教。
第一个版本,没有最后一个节点,每次从根节点开始遍历
public class LinkedList<E> {private Node head;public LinkedList() {}public E getFirst(){if(head==null){return null;}return head.value;}public LinkedList<E> addFirst(E e){head.pre=new Node(e, null, head);head=head.pre;return this;}public LinkedList<E> addNode(E e){Node lst=head;if(lst==null){this.head=new Node(e, null, null);return this;}else{while(true){if(lst.next==null){break;}else{lst=lst.next;}}lst.next=new Node(e, lst, null);return this;}}public LinkedList<E> remove(E e){Node lst=head;if(lst==null){throw new NullPointerException("the LinkedList is empty.");}else{while(true){if(e.equals(lst.value)){//移除这个元素if(lst.pre!=null){lst.pre.next=lst.next;}if(lst.next!=null){lst.next.pre=lst.pre;}lst=null;break;}lst=lst.next;}return this;}}@Overridepublic String toString() {StringBuffer buff=new StringBuffer("[");Node lst=this.head;while(lst!=null){buff.append(lst.value+",");lst=lst.next;}return buff.substring(0, buff.length()-1)+"]";}/**节点信息*/private class Node{public Node pre;public E value;public Node next;public Node(E value,Node pre,Node next) {this.value=value;this.pre=pre;this.next=next;}} }第二个版本,有了最后一个节点
public class LinkedList<E> {private Node head;private Node last;public LinkedList() {}public E getFirst(){if(head==null){return null;}return head.value;}public E getLast(){if(last==null){return null;}return last.value;}public LinkedList<E> addFirst(E e){head.pre=new Node(e, null, head);head=head.pre;return this;}public LinkedList<E> addNode(E e){Node lst=last;if(lst==null){//如果最后一个节点是空的则这个链表就是空的this.last=new Node(e, null, null);this.head=this.last;return this;}else{while(true){if(lst.next==null){//break;}else{lst=lst.next;}}lst.next=new Node(e, lst, null);last=lst.next;return this;}}public LinkedList<E> remove(E e){Node lst=head;if(lst==null){throw new NullPointerException("the LinkedList is empty.");}else{while(true){if(e.equals(lst.value)){//移除这个元素if(lst.pre!=null){lst.pre.next=lst.next;}if(lst.next!=null){lst.next.pre=lst.pre;}lst=null;break;}lst=lst.next;}return this;}}@Overridepublic String toString() {StringBuffer buff=new StringBuffer("[");Node lst=this.head;while(lst!=null){buff.append(lst.value+",");lst=lst.next;}return buff.substring(0, buff.length()-1)+"]";}/**节点信息*/private class Node{public Node pre;public E value;public Node next;public Node(E value,Node pre,Node next) {this.value=value;this.pre=pre;this.next=next;}}}注:以上两个版本都没有考虑在多线程下使用的情况。
以上所述是小编给大家介绍的Java实现双向链表(两个版本)的相关知识,希望对大家有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java实现双链表互相交换任意两个节点的方法。分享给大家供大家参考,具体如下:概述:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指
本文实例讲述了python双向链表原理与实现方法。分享给大家供大家参考,具体如下:双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个
本文实例讲述了PHP基于双向链表与排序操作实现的会员排名功能。分享给大家供大家参考,具体如下:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,
数据结构双向链表的实现双向链表中的每一个结点都含有两个指针域,一个指针域存放其后继结点的存储地址,另一个指针域则存放其前驱结点的存储地址。双向链表结点的类型描述
java实现双向链表实例详解双向链表是一个基本的数据结构,在Java中LinkedList已经实现了这种结构,不过作为开发者,也要拥有自己显示这种结构的能力。话