第一次使用泛型的方法写单向链表。
链表和数组的区别就是链表的存储位置不一定是连续的,数组的存储位置一定是连续的。
无序链表的增删改查时间复杂度分别为:
增加:O(1);删除O(n);修改O(n);查询O(n)
有序链表和无序链表在查询的时候有些区别
有序链表:
增加:O(n);删除O(n);修改O(n);查询O(n)
下面直接附上代码:
这是一个带头结点无序链表,没有数据的大小顺序
而有序链表需要在插入的时候做判断,修改后也要保证有序
public class LinkList<T> {
//定义数据域,数据和下一个LinkList
public T data;
public LinkList<T> next;
/**
* 增加
* @param data
*/
public void add(T data){
//如果下一个数据没有值,就给他赋值;如果有值,就让下一个结点调用add方法
if (next==null) {
next=new LinkList<T>();
next.data=data;
}
else{
next.add(data);
}
}
/**
* 删除
* @param data
*/
public void delete(T data) {
if (next==null) {
return;
}
LinkList<T> temp=next;
if (temp.data==data) {
next=temp.next;
temp.next=null;
}else{
next.delete(data);
}
}
/**
* 查找
* @param data
* @return
*/
public LinkList<T> find(T data){
if (next==null) {
return new LinkList<T>();
}
if (next.data.equals(data)) {
return next;
}else{
return next.find(data);
}
}
/**
* 更新,只需查找直接修改数据即可
* @param data源数据
* @param newdata新数据
*/
public void update(T data,T newdata){
LinkList<T> reusult=find(data);
reusult.data=newdata;
}
@Override
public String toString() {
return "List [data=" + data + ", next=" + next + "]";
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkList<Integer> list=new LinkList<Integer>();
list.add(5);
list.add(7);
list.add(99);
list.add(34);
list.add(-7);
System.out.println(list.toString());
list.delete(99);
System.out.println(list.toString());
System.out.println(list.find(8));
list.update(5, 500);
System.out.println(list.toString());
}
}