单链表的结构比较简单,图示如下: 单链表有很多个节点构成。每个节点由指针域和数值域构成,指针指向下一个节点的数值域。最后一个节点的指针指向的是NULL。 java实现单链表的一些基本的操作: package test;import javax.xml.soap.Node;/** * 单链表的创
要实现单链表,首先要建立链表的节点类:单链表在插入和删除操作时,有无头结点的实现是有区别的,总的来说,带有头结点的单链表实现起来比较方便,而不带头结点的单链表在链首插入和删除时要特殊处理,以下代码是带有头结点的单链表的实现。 //类定义、模板类的定义 #ifndef IncludeHeadNodeChain_H Java代码
/**
* 单链表的节点类,单链表的实现。
*/
package com.ty.third;
/**
* @author liming
*
*/
public class SLLNode {
//你要储存的信息单位
public T info;
//指向下一个元素
public SLLNode next;
public SLLNode(T i)
{
this(i,null);
}
//第二个参数传入node是为了快速建立链表
public SLLNode(T i, SLLNode node)
{
this.info = i;
this.next = node;
}
}
/**
* 单链表的节点类,单链表的实现。
*/
package com.ty.third;
/**
* @author liming
*
*/
public class SLLNode {
//你要储存的信息单位
public T info;
//指向下一个元素
public SLLNode next;
public SLLNode(T i)
{
this(i,null);
}
//第二个参数传入node是为了快速建立链表
public SLLNode(T i, SLLNode node)
{
this.info = i;
this.next = node;
}
}
然后,单链表类: Java代码
package com.ty.third;
public class SLLList
{
protected SLLNode head, tail;
//当前的节点,用于遍历所有元素
private SLLNode cur = null;
//创建一个空的单链表
public SLLList()
{
head = tail = null;
}
//添加头节点
public void addToHead(T info)
{
SLLNode sllNode = new SLLNode(info);
//如果链表为空
if(head == null)
{
head = sllNode;
tail = head;
}
//链表不为空
else
{
sllNode.next = head;
head = sllNode;
}
}
//打印所有链表节点
public void printAllNode()
{
SLLNode temp = null;
for(prepare();hasNext();next())
{
temp = getNextNode();
System.out.println(temp.info);
}
}
//添加尾节点
public void addToTail(T info)
{
SLLNode sllNode = new SLLNode(info);
//链表为空,则直接创建头节点
if(head == null)
{
addToHead(info);
}
//链表不为空,加到链表尾部
else
{
tail.next = sllNode;
tail = sllNode;
}
}
//列表是否为空
public boolean isEmpty()
{
return (head == null);
}
//判断列表是否有下一个元素
public boolean hasNext()
{
if(isEmpty())
return false;
if(cur.next == null)
return false;
return true;
}
//获得当前元素
public SLLNode getNextNode()
{
return cur.next;
}
//当前元素下移
public void next()
{
cur = cur.next;
}
//为遍历准备
public void prepare()
{
cur = new SLLNode(null);
cur.next = head;
}
public static void main(String []args)
{
SLLList sllList = new SLLList();
sllList.addToHead("Joking");
sllList.addToHead("Testing");
sllList.addToTail("Lily");
sllList.printAllNode();
SLLList sllList2 = new SLLList();
for(sllList.prepare(); sllList.hasNext(); sllList.next())
{
sllList2.addToHead(sllList.getNextNode().info);
}
sllList2.printAllNode();
}
}