最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)雙向鏈表(兩個(gè)版本)

 更新時(shí)間:2016年02月06日 16:44:28   投稿:mrr  
這篇文章主要介紹了Java實(shí)現(xiàn)雙向鏈表(兩個(gè)版本)的相關(guān)資料,需要的朋友可以參考下

臨近春節(jié),項(xiàng)目都結(jié)束了,都等著回家過(guò)年了。下面是小編給大家研究數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),鏈表算是經(jīng)常用到的一種數(shù)據(jù)結(jié)構(gòu)了,現(xiàn)將自己的實(shí)現(xiàn)展示如下,歡迎大神賜教。

第一個(gè)版本,沒有最后一個(gè)節(jié)點(diǎn),每次從根節(jié)點(diǎn)開始遍歷

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)){
//移除這個(gè)元素
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;
}
}
@Override
public 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)+"]";
}
/**節(jié)點(diǎn)信息*/
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;
}
} 
}

第二個(gè)版本,有了最后一個(gè)節(jié)點(diǎn)

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){//如果最后一個(gè)節(jié)點(diǎn)是空的則這個(gè)鏈表就是空的
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)){
//移除這個(gè)元素
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;
}
}
@Override
public 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)+"]";
}
/**節(jié)點(diǎn)信息*/
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;
}
}
}

注:以上兩個(gè)版本都沒有考慮在多線程下使用的情況。

以上所述是小編給大家介紹的Java實(shí)現(xiàn)雙向鏈表(兩個(gè)版本)的相關(guān)知識(shí),希望對(duì)大家有所幫助。

相關(guān)文章

最新評(píng)論

沂水县| 依安县| 海口市| 凤山市| 顺昌县| 青川县| 通榆县| 沭阳县| 华亭县| 德惠市| 平原县| 纳雍县| 于田县| 定襄县| 宁蒗| 阜平县| 锡林浩特市| 沙田区| 朝阳县| 滕州市| 平阴县| 怀宁县| 阿克陶县| 桓仁| 鸡西市| 广元市| 阿坝| 洞头县| 临武县| 扎兰屯市| 柞水县| 祁门县| 资溪县| 灵山县| 扶风县| 大宁县| 苗栗市| 安乡县| 枣阳市| 乐平市| 海林市|