手写一个简单的单链表

先创建一个简单的实体类

class Data{
	private int id;
	private String name;
	private Data next;	//代表下一个节点,如果没有下一个节点,则为空
	
	public Data(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Data getNext() {
		return next;
	}
	public void setNext(Data next) {
		this.next = next;
	}
	@Override
	public String toString() {
		return "Data [id=" + id + ", name=" + name + "]";
	}

然后写一个存放数据的链表类

class SingleList {
	//创建一个头节点,后面的数据将添加到头节点的后面
	private Data head = new Data(0, "");
	//显示链表
	public void show() {
		if(head.getNext() == null) {
			System.out.println("链表为空");
			return;
		}
		Data temp = head;	//特别注意的是头节点不能动,否则会改变链表结构,创建一个辅助节点遍历链表
		
		while(temp.getNext() != null) {
			temp = temp.getNext();	//将节点后移
			System.out.println(temp);
		}
	}
	
	//将数据直接添加到链表末尾
	public void add(Data newData) {
		Data temp = head;	//头节点不能动,否则会改变链表结构,创建一个辅助节点遍历链表
		while(temp.getNext() != null) {
			temp = temp.getNext();
		}
		temp.setNext(newData);
	}
	
	//根据ID大小添加数据,小在前,大在后
	public void addByID(Data newData) {
		Data temp = head;
		boolean flag = false;	//给定一个标识符,判断该节点是否存在
		while(temp.getNext() != null) {
			if(temp.getNext().getId() > newData.getId()) {
				break;
			}else if(temp.getNext().getId() == newData.getId()){
				flag = true;
				break;
			}
			temp = temp.getNext();
		}
		if(flag) {
			System.out.println("编号为"+newData.getId()+"已存在,无法再次添加");
		}else {
			newData.setNext(temp.getNext());
			temp.setNext(newData);
		}
	}
	
	//根据ID删除数据
	public void del(int id) {
		if(head.getNext() == null) {
			System.out.println("链表为空,无法删除");
			return;
		}
		Data temp = head;
		boolean flag = false;
		while(temp.getNext() != null) {
			if(temp.getNext().getId() == id) {
				flag = true;
				break;
			}
			temp = temp.getNext();
		}		
		if(flag) {
			temp.setNext(temp.getNext().getNext());
		}else {
			System.out.println("未找到id为"+id+"的数据");
		}		
	}

	//根据ID修改名称
	public void edit(Data newData) {
		if(head.getNext() == null) {
			System.out.println("链表为空无法修改");
			return;
		}
		Data temp = head;
		boolean flag = false;
		while(temp.getNext() != null) {
			if(temp.getNext().getId() == newData.getId()) {
				flag = true;
				break;
			}
			temp = temp.getNext();
		}
		if(flag) {
			temp.getNext().setName(newData.getName());
		}else {
			System.out.println("为找的id为"+newData.getId()+"的名称");
		}		
	}
}

写一个主类用来调试代码

public class SingleListDemo {
	public static void main(String[] args) {
		Data data1 = new Data(1, "aa");
		Data data2 = new Data(2, "bb");
		Data data3 = new Data(3, "cc");
		Data data4 = new Data(4, "dd");
		
		SingleList singleList = new SingleList();
		
//		System.out.println("不考虑ID直接添加");
//		singleList.add(data1);
//		singleList.add(data2);
//		singleList.add(data3);
//		singleList.add(data4);
		
		System.out.println("考虑ID添加");	
		singleList.addByID(data3);
		singleList.addByID(data1);
		singleList.addByID(data4);
		singleList.addByID(data2);
		
		singleList.show();
		
//		singleList.del(2);
//		System.out.println("删除之后");
//		singleList.show();
		
		Data data5 = new Data(2,"BB");
		singleList.edit(data5);
		System.out.println("修改之后");
		singleList.show();
		
	}
	
}

对数据结构的理解还不够,如果代码中有错误的地方还请各位看官指正,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值