一、创建单链表
/**
* Created by Xi on 2017/7/30.
* 单链表中链结点
*/
public class LinkSingle {
public int iData;
public double dData;
public LinkSingle next;
public LinkSingle(int id,double dd){
iData=id;
dData=dd;
}
/**
* 展示链接点
*/
public void displayLink(){
Log.i("LinkSingle","{"+iData+","+dData+"}");
}
}
/**
* Created by Xi on 2017/7/30.
* 单链表
*/
public class LinkListSingle {
private static final String TAG="LinkListSingle";
private LinkSingle first;//单链表的第一个元素
public LinkListSingle(){
first=null;
}
/**
* 在链表链首插入元素
* @param id
* @param dd
*/
public void insertFirst(int id,double dd){
LinkSingle newLink=new LinkSingle(id,dd);//创建一个新链接点
newLink.next=first;//将原先的首连接点排到新链接点后面
first=newLink;//链表新元首连接点为新插入的链接点
}
/**
* 判断链表是否为空
*/
public boolean isEmpty(){
return first==null;
}
/**
* 删除连接点,从链表首删除
*/
public LinkSingle deleteFirst(){
LinkSingle temp=first;
first=first.next;
return temp;
}
/**
* 查找连结点
*/
public LinkSingle find(int key){
LinkSingle current=first;
while(current.iData!=key){//循环找
if(current.next==null){//未找到,返回null
return null;
}else{
current=current.next;
}
}
return current;//找到返回
}
/**
* 删除对应的结点
*/
public LinkSingle delete(int key){
LinkSingle current=first;
LinkSingle previous=first;//上一个结点,用于当找到要删除的结点,好将该节点与别删除结点的下一个结点链接。
while(current.iData!=key){//查找被删除的结点
if(current.next==null){//未找到要删除的结点返回null
return null;
}else{
previous=current;
current=current.next;
}
}
if(current==first)first=first.next;//被删除的结点为元首结点
else previous.next=current.next;
return current;
}
/**
* 展示链表
*/
public void displayList(){
Log.i(TAG,"List (first-->last):");
LinkSingle current=first;
while(current!=null){
current.displayLink();
current=current.next;
}
Log.i(TAG,"");
}
}
二、调用函数如下
/**
* 单链表
*/
private void link_single() {
//创建链表,并添加结点。
LinkListSingle theList = new LinkListSingle();
theList.insertFirst(11, 1.99);
theList.insertFirst(22, 2.99);
theList.insertFirst(33, 3.99);
theList.insertFirst(44, 4.99);
theList.insertFirst(55, 5.99);
theList.displayList();
//循环删除结点,直到删光
Log.i(TAG,"Deleted ");
while (!theList.isEmpty()) {
LinkSingle aLink = theList.deleteFirst();
aLink.displayLink();
}
//添加结点
theList.insertFirst(66, 6.99);
theList.insertFirst(77, 7.99);
//寻找结点
LinkSingle linkSingle = theList.find(66);
if(linkSingle!=null)Log.v(TAG,"Found link with key"+linkSingle.iData);
else Log.v(TAG,"Can't find Link");
//删除结点
LinkSingle delete = theList.delete(66);
if(delete!=null)Log.v(TAG,"Deleted link with key"+ delete.iData);
else Log.v(TAG,"Can't delete link");
}
日志打印如下:
08-14 18:30:56.597 9687-9687/com.tool.wpn.quicksort I/LinkListSingle: List (first-->last):
08-14 18:30:56.597 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {55,5.99}
08-14 18:30:56.598 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {44,4.99}
08-14 18:30:56.598 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {33,3.99}
08-14 18:30:56.598 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {22,2.99}
08-14 18:30:56.598 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {11,1.99}
08-14 18:30:56.598 9687-9687/com.tool.wpn.quicksort I/MainActivity: Deleted
08-14 18:30:56.599 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {55,5.99}
08-14 18:30:56.600 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {44,4.99}
08-14 18:30:56.600 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {33,3.99}
08-14 18:30:56.600 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {22,2.99}
08-14 18:30:56.600 9687-9687/com.tool.wpn.quicksort I/LinkSingle: {11,1.99}
08-14 18:30:56.600 9687-9687/com.tool.wpn.quicksort V/MainActivity: Found link with key66
08-14 18:30:56.601 9687-9687/com.tool.wpn.quicksort V/MainActivity: Deleted link with key66
源码下载地址:点击打开链接