链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
链表类型
单向链表
双向链表
循环链表
块状链表
其它扩展
这里以单项链表为例:
(取自维基百科)
实现单向链表的初始化,添加节点(末尾和链中),删除节点(末尾和链中)。
class Linknode
{
private int val;
public Linknode next;
public Linknode(int val)
{
this.val=val;
}
}
class util
{
public Linknode init_node() //初始化
{
Linknode head=new Linknode();
head.next==null;
return head;
}
public void add(Linknode head,int val) //空链表内添加元素
{
Linknode newnode=Linknode(val);
Linknode last=last_node(head);
last.next=newnode;
newnode.next=null;
}
public void insert(Linknode node,int val) //链表内插入元素
{
Linknode tmp=node.next;
Linknode newnode=Linknode(val);
node.next=newnode;
newnode.next=tpm;
}
public void delete(Linknode head) //删除链表末尾元素
{
if (head.next=null)
return null;
Linknode tmp=last_node(head);
tmp=null;
}
public void del (Linknode head,Linknode node) //删除链表内元素
{
if (head.next=null)
return null;
Linknode previous=previous_node(head,node);
Linknode tmp=node.next;
if(previous!=null)
previous.next=tmp;
else
System.out.print("none");
}
public Linknode find_node(Linknode head,int val){ //根据值来查找节点
if (head.next=null)
return null;
Linknode tmp=head;
while(tmp.next!=null)
{
if(tmp.next.val==val)
return tmp.next;
tmp=tpm.next;
}
}
public Linknode last_node(Linknode head) //最后一个元素
{
if (head.next==null)
return null;
Linknode tmp=head;
while(tmp.next!=null)
tmp=temp.next;
return tmp;
}
public Linknode previous_node(Linknode head,Linknode node) //node元素前的一个元 //素
{
if (head.next==null)
return null;
Linknode tmp=head;
while(tmp.next!=null)
{
if (temp.next==node)
return node;
temp=temp.next;
}
return null;
}
} 还需要进一步修改。
原文:http://zhenzhuangde.blog.51cto.com/10697385/1733035