鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是並不會按線性的順序存儲數據,而是在每一個節點裏存到下一個節點的指針(Pointer)。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間複雜度分別是O(logn)和O(1)。
鏈表類型
單向鏈表
雙向鏈表
循環鏈表
塊狀鏈表
其它擴展
這裏以單項鍊表爲例:
(取自維基百科)
實現單向鏈表的初始化,添加節點(末尾和鏈中),刪除節點(末尾和鏈中)。
class LinkNode { private linknode head; class linknode { public int val; public linknode next; public linknode(int val) { this.val=val; next=null; } } public void add(int n) //空鏈表或鏈表內添加元素 { linknode node=new linknode(n); if(isempty()) head=node; else last_node().next=node; } public void insert(int m,int n) //鏈表內插入元素 { linknode node=new linknode(n); linknode tmp=find_node(m); node.next=tmp.next; tmp.next=node; } public void delete() //刪除鏈表末尾元素 { if (head==null) return null; linknode tmp=last_node(); tmp=null; } public void del (linknode node) //刪除鏈表內元素 { if (head==null) return null; linknode previous=previous_node(); linknode tmp=node.next; if(previous!=null) previous.next=tmp; else System.out.print("none"); } public linknode find_node(int n) //根據值來查找節點 { if (head==null) return null; linknode tmp=head; linknode cur; while(tmp!=null) { cur=tmp; if(cur.val==n) return cur; tmp=tpm.next; } } public linknode last_node() //最後一個元素 { if (head==null) return null; linknode tmp=head; linknode cur; while(tmp!=null) { cur=tmp; tmp=temp.next; } return cur; } public linknode previous_node(linknode node) //node元素前的一個元 //素 { if (head==null) return null; linknode tmp=head; while(tmp.next!=null) { if (tmp.next==node) return tmp; temp=temp.next; } return null; } }
還需要進一步修改。