链表相关

链表(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;
	}
}		

还需要进一步修改。

你可能感兴趣的:(链表,相关)