代码
Data.java
/**
* 数据类
* @author 焦焱-16060211104
*主要用于存储数据,可以根据需求不同放入不同数据
*/
public class Data {
/**
* Int型数据
*/
private int i;
public Data(int i) {
super();
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
/**
* 比较
* @param obj Data数据
* @return 是否相等
*/
public boolean equals(Data obj) {
return obj.getI()==i;
}
/**
* 重构ToString方便输出
*/
@Override
public String toString() {
// TODO Auto-generated method stub
return String.valueOf(i);
}
}
Node.java
package TwoTwo;
/**
* 节点类
* @author 焦焱-16060211104
*
*/
public class Node {
/**
* 数据域
*/
private Data data;
/**
* 指向下一个节点的指针
*/
private Node next;
public Node() {
}
public Node(Data data, Node next) {
super();
this.data = data;
this.next = next;
}
public Node(Data data) {
super();
this.data = data;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
Link.java
package TwoTwo;
/**
* 链表类
* @author 焦焱-16060211104
*生成链表
*/
public class Link {
/**
* 头结点
*/
private Node Head = new Node();
/**
* 用于记录当前链表元素数目
*/
private int Num=0;
/**
* 获得最后一个节点
* @return 该链表的最后一个节点
*/
public Node LastNode()
{
Node Last = Head;
while(Last.getNext()!=null)
{
Last=Last.getNext();
}
return Last;
}
/**
* 添加一个元素
* @param data 数据
* @return 是否添加成功
*/
public boolean add(Data data)
{
Node temp = LastNode();
temp.setNext(new Node(data,null));
Num++;
return true;
}
/**
* 打印当前所有元素
*/
public void print()
{
Node temp = Head;
while(temp.getNext()!=null)
{
temp=temp.getNext();
System.out.print(temp.getData()+" ");
}
}
/**
* 查找
* @param data 数据
* @return 如果找到返回Node,没找到返回null
*/
public Node Select(Data data)
{
Node temp = Head;
while(temp.getNext()!=null)
{
temp=temp.getNext();
if(data.equals(temp.getData()))
return temp;
}
return null;
}
/**
* 删除节点
* @param data 数据
* @return 是否删除成功
* 一次只能删除一个,如果有多个重复元素需要重复删除。
*/
public boolean Delete(Data data)
{ Node temp = Head;
Node before= null;
if(Select(data)!=null) {
while(temp.getNext()!=null)
{
before=temp;
temp=temp.getNext();
if(data.equals(temp.getData()))
break;
}
before.setNext(before.getNext().getNext());
Num--;
return true;
}
else
return false;
}
/**
* 修改节点
* @param Old 原数据
* @param New 新数据
* @return 是否修改成功
*/
public boolean Alter(Data Old,Data New)
{ Node temp = Select(Old);
if(temp!=null)
{
temp.setData(New);
return true;
}
else
return false;
}
}
Test.java
package TwoTwo;
public class Test {
public static void main(String[] args) {
Link T = new Link();
T.add(new Data(1));
T.add(new Data(2));
T.add(new Data(3));
T.add(new Data(1));
T.print();
System.out.println();
System.out.println(T.Select(new Data(3)).getData());
T.Delete(new Data(1));
T.print();
System.out.println();
T.Alter(new Data(3), new Data(4));
T.print();
}
}