之前写了关于单链表操作是以 int 型为例,但是在时间应用中,链表很少仅仅存储数字,更多的是对象。那么这一篇以存储对象为例,简单介绍如何对单链表进行简单的操作。
注意事项:删除与增添操作应注意链表的长度,不可溢出,用不专业的话讲,溢出分为“上溢”和“下溢”,上溢指的是所删除/插入的数据位置超过链表长度;下溢出指的是删除/插入的数据位置为负。
比如,链表长度为2,现在执行操作要求删除位置为4的数据,显然这是会报错的。
比如,链表为空,现在要求删除数据,也是会报错的。
比如,要求删除位置为-1的数据,位置-1是不存在的。
具体代码详见如下,若是刚刚接触链表,建议先看前一篇,以 int 型为例的。在阅读过程中发现代码有什么不周到的地方,欢迎指出讨论。
package ListLink;
public class LinkListA {
public Node first;
public int tmp=0; //节点位置
public int len=0; //链表长度
public LinkListA()
{
this.first=null;
}
public void addFirstNode(Teacher teacher)
{
Node node=new Node(teacher);
node.next=first;
first=node;
len++;
}
public Node deleteFirstNode()
{
Node node=null;
if(first==null)
{
System.out.println("删除失败,该链表为空");
}
else
{
node=first;
first=node.next;
len--;
}
return node;
}
public void addNode(int index,Teacher teacher)
{
Node node=new Node(teacher);
Node previous=first;
Node current=first;
if(index>len||index<0)
{
System.out.println("插入失败,超过链表长度");
return;
}
while(tmp!=index)
{
previous=current;
current=current.next;
tmp++;
}
if(index==0)
{
node.next=first;
first=node;
len++;
}
else
{
node.next=current;
previous.next=node;
len++;
}
tmp=0;
}
public Node deleteNodeByIndex(int index)
{
Node node=null;
if(index>=len||index<0)
{
System.out.println("删除失败,超出链表长度");
return node;
}
Node previous=first;
Node current=first;
while(tmp!=index)
{
previous=current;
current=current.next;
tmp++;
}
if(index==0)
{
node=first;
first=node.next;
len--;
}
else
{
node=current;
previous.next=current.next;
len--;
}
return node;
}
public void PrintAll()
{
Node node=first;
while(node!=null)
{
node.display();
node=node.next;
}
}
public static void main(String[] args)
{
LinkListA lla=new LinkListA();
Teacher teacher=new Teacher("0001","张三","男",45,"12111111","1111@11.com");
lla.PrintAll();
lla.addFirstNode(teacher);
Teacher teacher1=new Teacher("0001","李四","男",42,"12111111","1111@11.com");
lla.addNode(-2, teacher1);
lla.PrintAll();
}
}
package ListLink;
public class Node {
protected Node next;
protected Teacher teacher;
public Node(Teacher teacher)
{
this.teacher=teacher;
}
public void display()
{
System.out.println(" 教工编号: "+teacher.getSno()+" 教工姓名: "+teacher.getSname()+" 性别: "+teacher.getSex()+" 年龄: "+teacher.getAge()+" 电话: "+teacher.getTel()+" 邮箱:"+teacher.getEmail());
}
}
package ListLink;
public class Teacher {
private String sno;
private String sname;
private String sex;
private int age;
private String tel;
private String email;
public Teacher(String sno,String sname,String sex,int age,String tel,String email)
{
this.sno=sno;
this.sname=sname;
this.sex=sex;
this.age=age;
this.tel=tel;
this.email=email;
}
public Teacher(Teacher teacher)
{
this.sno=teacher.sno;
this.sname=teacher.sname;
this.sex=teacher.sex;
this.age=teacher.age;
this.tel=teacher.tel;
this.email=teacher.email;
}
public String getSno() {
return sno;
}
public String getSname() {
return sname;
}
public String getSex() {
return sex;
}
public int getAge() {
return age;
}
public String getTel() {
return tel;
}
public String getEmail() {
return email;
}
}