鏈表相關

鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是並不會按線性的順序存儲數據,而是在每一個節點裏存到下一個節點的指針(Pointer)。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間複雜度分別是O(logn)和O(1)。

鏈表類型
    單向鏈表

  • 雙向鏈表

  • 循環鏈表

  • 塊狀鏈表

  • 其它擴展

這裏以單項鍊表爲例:

wKioL1aPahmDdaq3AAAYwCCsgnA394.png

(取自維基百科)

實現單向鏈表的初始化,添加節點(末尾和鏈中),刪除節點(末尾和鏈中)。

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;
	}
}		

還需要進一步修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章