目录
一.链结点
在链表中,每一个数据项都包含在链结点中,一个链结点是某个类的对象,这个类叫Link,因为一个类有许多类似的结点,所有有必要用一个不同于链表的类来表达链结点,每个Link对象都包含一个对下一个链结点引用的字段next,但是链表本身的对象中一个字段指向对第一个链结点的引用
链结点 Link的定义:
class Link{
public int iData;
public double dData;
public Link next;
}
二.单链表
单链表的操作:
·在链表头插入一个数据项
·在链表头删除一个数据项
·遍历链表显示它的内容
1.单链表的插入方法insertFirst()
链表插入:
定义一个新的链表结点,让新结点连接旧结点,再让头结点连接新结点
插入insertFirst()代码:
public void insertFirst(int id,double dd){
Link newLink=new Link(id,dd);
newLink.next=first;
first=newLink;
}
2.单链表的删除方法deleteFirst()
链表删除:
通过把first重新指向第二个链结点,断开和第一个链结点的连接
deleteFirst():
public Link deleteFirst(){
Link temp=first;
first=first.next;
return temp;
}
3.链表显示displayList()
代码:
public void displayList(){
System.out.print("List(fist—>last):");
Link current=first;
while(current!=null){
current.displayLink();
current=current.next;
}
System.out.print("");
}
4.单链表代码:
class Link{ //定义链表
public int iData;
public double dData;
public Link next;
public void displayLink(){
System.out.print("{"+iData+","+dData+"}");
}
public Link(int id,double dd){
iData=id;
dData=dd;
}
}
class LinkList{ //定义单链表
private Link first;
public LinkList(){
first=null;
}
public boolean isEmpty(){ //链表是否为空
return (first==null);
}
public void insertFirst(int id,double dd){ //单链表插入操作
Link newLink=new Link(id,dd);
newLink.next=first;
first=newLink;
}
public Link delectFirst(){ //删除操作
Link temp=first;
first=first.next;
return temp;
}
public void displayList(){ //显示单链表
System.out.println("List(first—>last):");
Link current=first;
while (current!=null){
current.displayLink();
current=current.next;
System.out.println(" ");
}
}
}
三. 查找和删除指定链结点
查找的实现:通过一个current变量开始时指向first,然后通过不断地把自己赋值为current.next,沿着链表向前移动,如果要查找的值和链表的值相同,就返回链表结点的引用,如果没有找到就返回null
删除操作的实现:删除操作先寻找到要删除的结点,然后将前一个结点和后一个结点连接,实现删除操作
代码:
public class CollectionDemo {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.insertFirst(1,12);
linkList.insertFirst(2,23);
linkList.insertFirst(3,34);
linkList.displayList();
Link j=linkList.find(2);
System.out.println("第二个元素为:"+j.dData);
Link d=linkList.delect(1);
System.out.println("删除第一个元素后:");
linkList.displayList();
}
}
class Link { //链表结点
public int iData;
public double dData;
public Link next; //链表结点初始化
public Link(int id, double dd) {
this.dData = dd;
this.iData = id;
}
//显示数据
public void displayLink() {
System.out.print("{" + iData + "," + dData + "}");
}
}
//链表定义
class LinkList{
private Link first;
public LinkList(){
first=null;
}
//插入操作
public void insertFirst(int id,double dd){