代码
/*编写程序实现单向链表数据结构:
public class Node {
Object data;
Node next;
}
public class MyLinkedList{
Node header;
....
// 添加数据的方法
// 删除数据的方法
// 修改数据的方法
// 查找数据的方法
// 打印集合中每个元素的方法
}
最后编写测试程序*/
public class SimplyLinkedListTest {
public static void main(String[] args) {
SimplyLinkedList sll = new SimplyLinkedList();
//往单链表中加元素
sll.add("zhangsan");
sll.add(1);
sll.add(new Object());
sll.add(3.14);
//删元素
sll.remove(3.14);
//输出元素
sll.print();
}
}
public class Node<E> {
E item;
Node<E> next;
//instructor
public Node() {
}
public Node(E item, Node<E> next) {
this.item = item;
this.next = next;
}
}
public class SimplyLinkedList {
Node header;
/**向单链表中增加结点
*
* @param obj 结点
*/
public void add(Object obj){
if (header == null){
header = new Node(obj, null);
}else{
findLast(header).next = new Node(obj, null);
}
}
/**找到现有链表中最后一个元素
*
* @return 该链表中最后一个元素
*/
private Node findLast(Node header) {
if (header.next == null){
return header;
}
return findLast(header.next);
}
/**向单链表中删除结点
*
* @param obj 要删除的结点
*/
public void remove(Object obj){
Node node = header;
Node prenode = node;
//flag=0结点未删除,flag=1结点已删除
int flag = 0;
while (node != null){
if (obj.equals(node.item)){
prenode.next = node.next;
System.out.println(obj + "已删除!");
flag = 1;
}
prenode = node;
node = node.next;
}
//遍历完整个链表flag=0,说明无此元素
if (flag == 0){
System.out.println("无此元素,删除失败!");
}
}
/**修改单链表的数据
*
* @param pre 想要修改的元素
* @param now 修改成的元素
*/
public void set(Object pre, Object now){
//链表中无结点有该元素
if (get(pre) == null){
return;
}
get(pre).item = now;
}
/**
*
* @param obj 查找的元素
* @return 若找到则返回查找元素的结点,否则返回null
*/
public Node get(Object obj){
Node node = header;
while (node != null){
if (obj.equals(node.item)){
return node;
}
node = node.next;
}
return null;
}
/**打印单链表中结点数据
*
*/
public void print(){
Node node = header;
while (node != null){
System.out.println(node.item);
node = node.next;
}
}
}