接(二)http://blog.csdn.net/molu_chase/article/details/52356346
2.倒置一个链表
下面的ConvertList()实现的是倒置一个链表,用的是递归的方法,直到走到链表为空,返回该节点,并执行调用函数后的代码,将返回的节点的next节点设为当前的节点。
节点属性:
private int id;
private String name;
private String sex;
private ClassStruct next;
创建与倒置函数
public class AndroidTest {
//创建一个ClassStruct类的链表
public static void main(String[] args) {
int i=1;
ClassStruct struct=new ClassStruct();
struct.setId(0);
ClassStruct struct2=null;
ClassStruct struct3=struct;
while(i<10){
struct2=new ClassStruct();
struct2.setId(i);
struct.setNext(struct2);
struct=struct2;
i++;
}
struct2.setName(null);
//传入链表头
ConvertList(struct3);
}
//用递归实现的倒置链表
public static ClassStruct ConvertList(ClassStruct struct){
ClassStruct struct2;
if(struct.getNext()==null){
System.out.println(struct.getId());
return struct;
}
struct2=ConvertList(struct.getNext());
struct2.setNext(struct);
// System.out.println(struct.getId());
return struct;
}
}
3.链表和数组的区别,查找某个元素和插入某个元素的时间空间复杂度
链表可以任意动态添加,而数组是固定的空间大小;数组中的插入和删除会涉及到大部分的元素,而链表只用前后两个元素的改变;链表比较占空间,而数组占空间小。
关于空间复杂度,我觉得都没有消耗,应该是O(1)
查找的时间复杂度都是O(n)
插入的话,数组的时间复杂度是O(n);而对于链表,如果是指定序号的,则为O(1),如果是相对位置的话,是O(n)