链表LinkedList的Java实现
生活随笔
收集整理的這篇文章主要介紹了
链表LinkedList的Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:節點類(Node.java)
package cn.ZiJiCollection;public class Node {//每個節點包含三個內容Node previous;Node next;Object element;public Node(Node previous, Node next, Object element) {super();this.previous = previous;this.next = next;this.element = element;}public Node(Object element) {super();this.element = element;}}二:SxtLinkedList.java
package cn.ZiJiCollection;public class SxtLinkedList<E> {//定義初始節點private Node first;private Node last;private int size;public void add(E element) {//建立節點nodeNode node = new Node(element);//判斷初始節點為空,為空則建立節點if(first==null) {first=node;last=node;}else {//節點:{first last node}//開始情況node.previous=last;node.next=null;//last后移,node變成新的lastlast.next=node;last=node;}size++;}//打印 public String toString() {StringBuilder str=new StringBuilder("[");Node temp=first;while(temp!=null) {str.append(temp.element+",");temp=temp.next;}//將最后的逗號替換成“】”str.setCharAt(str.length()-1, ']');return str.toString(); }public void remove(int index) {SuoYingHeLi(index);Node temp=findNode(index);Node up=temp.previous;Node down=temp.next;if(up!=null) {//判斷是否為空up.next=down;}if(down!=null) {down.previous=up;}if(index==0) {//刪第一個first=down;}if(index==size-1) {//刪最后一個last=up;}size--; }//查找指定位置元素 public E get(int index) {SuoYingHeLi(index);Node temp=findNode(index);return temp!=null?(E)temp.element:null; }//判斷索引是否合理進行封裝 private void SuoYingHeLi(int index) {if(index<0||index>size) {throw new RuntimeException("索引不合法!");} }//查找節點 public Node findNode(int index) {SuoYingHeLi(index);//合理,提高查找效率(二分法)Node temp=null;if(index<=(size>>1)) {//size>>1相當于除于2temp=first;for(int i=0;i<index;i++) {temp=temp.next;}}else {temp=last;for(int j=(size-1);j>index;j--) {temp=temp.previous;}}return temp; }//添加節點 public void add(int index,E element) {SuoYingHeLi(index);Node newNode=new Node(element);Node temp=findNode(index) ;if(temp!=null) {Node up=temp.previous;up.next=newNode;newNode.previous=up;temp.previous=newNode;newNode.next=temp;}if(index==0) {first.previous=newNode;newNode.next=first;first=newNode;}if(index==size-1) {last.next=newNode; newNode.previous=last;last=newNode;} }public static void main(String[] args) {SxtLinkedList<String> list=new SxtLinkedList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");System.out.println(list);System.out.println(list.get(4));list.remove(4);System.out.println(list);list.add(3, "唐");System.out.println(list); } }三:畫圖解釋
四:結果顯示
[a,b,c,d,e,f] e [a,b,c,d,f] [a,b,c,唐,d,f]五:待完善之處
在增加節點add(int index,E element) 方法時,如果在0處添加數據,會拋出異常
總結
以上是生活随笔為你收集整理的链表LinkedList的Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可视化日历(Java实现)
- 下一篇: 基于FFT的信号频谱分析