package singlelist_imp;
public class Link {
public int idata;
public double ddata;
public Link next; //链表指针
public Link(int idata,double ddata) //在构造函数中不用初始化first,因为当它被创建时first会自动被赋值为null
{
this.idata=idata;
this.ddata=ddata;
}
public void display_link()
{
System.out.print("{"+idata+","+ddata+"}");
}
}
package singlelist_imp;
public class Linklist {
private Link first; //定义一个头指针
public Linklist()
{
this.first=null;
}
public boolean empty()
{
return this.first==null;
}
/*为了插入新结点,只需要使新建立的结点的next指向原来的first值,然后改变first值,使它指向新建立的链结点*/
public void insert_link(int idata,double ddata) //定义插入函数
{
Link newlink=new Link(idata,ddata);
newlink.next=first;
first=newlink; //使头指针指向要插入的数据的位置
}
/*通过把first重新指向第二个结点,使其与第一个结点断开链接就达到了删除的目的
* 通过查看第一个结点的next就可以找到第二个结点
* */
public Link delete_first() //删除链表的第一个元素
{
Link temp=first; //将头指针赋给一个变量
first=first.next; //头指针指向下一个结点,此句说明删除第一个结点
return temp; //返回删除的Link
}
public void display_list() //循环打印一个链表中的元素
{
System.out.println("打印链表中的数据:");
Link current_link=first;
while(current_link!=null)
{
current_link.display_link(); //调用Link类中的打印函数
current_link=current_link.next;
}
System.out.println(" ");
}
}
//以下是对单链表的操作
package singlelist_imp;
public class Singlelist_test {
public static void main(String[] args)
{
Linklist llist=new Linklist();
llist.insert_link(11,23.3); //插入时是从头结点插入的
llist.insert_link(12,34.4);
llist.insert_link(22,823.3);
llist.insert_link(41,432.3);
llist.insert_link(61,555.4);
llist.display_list(); //调用打印函数且从头结点打印的
while(!llist.empty()) //在调用删除之前先判断链表是否为空
{
System.out.println("调用deletefirst()");
Link dellink=llist.delete_first();
dellink.display_link(); //调用一下Link类中的打印函数,打印要删除的数据
System.out.println(" ");
}
llist.display_list();
}
}