Java實現雙向鏈表(兩個版本)_java

來源:互聯網
上載者:User

臨近春節,項目都結束了,都等著回家過年了。下面是小編給大家研究資料結構的相關知識,鏈表算是經常用到的一種資料結構了,現將自己的實現展示如下,歡迎大神賜教。

第一個版本,沒有最後一個節點,每次從根節點開始遍曆

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實現雙向鏈表(兩個版本)的相關知識,希望對大家有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.