俗话说,熟能生巧,刚刚接触链表的时候,可能觉得这东西太不好理解了,代码是敲出来的,所以把最基本的链表中增、删、改、除练习的特别熟的时候,才会更容易明白以后得双链表以及他们的反转和各类题型,千里之行始于足下,所以我把单链表最基本用法写出来,希望可以帮助到你。
初始化
public class data1 {
public static class Node{
Node next;
Object data;
public Node(Object data){
this.data = data;
}
public Node(Node next,Object data){
this.data = data;
this.next = next;
}
}
private static int size;
private static Node dummyNode;
private data1(Node dummyNode){
this.dummyNode = new Node(null,null);
}
增删改除各类用法
//在任位置插入元素
private static void add(int index,Object data){
IsCheck(index);
Node pre = dummyNode;
Node newNode = new Node(data);
for(int i=0; i<index; i++){
pre=pre.next;
}
newNode.next = pre.next;
pre.next = newNode;
size++;
}
//头插
private static void addFirst(int index, Object data){
IsCheck(index);
add(0,data);
}
//尾插
private static void addLast(int index,Object data){
IsCheck(index);
add(size,data);
}
//找到当前结点
private static Node get(int index){
Node pre =dummyNode.next;
for(int i=0; i<index; i++){
pre=pre.next;
}
return pre;
}
//将某处的数据换成一个新的数据,返回旧数据
private static Object set(int index,Object newData){
IsCheck(index);
Node node = get(index);
Object oldData = node.data;
node.data = newData;
return oldData;
}
//移除某个结点
private static void remove(int index){
IsCheck(index);
Node pre = dummyNode;
for(int i=0; i<index; i++){
pre=pre.next;
}
pre.next = pre.next.next;
size--;
}
//清空链表
private static void clear(){
for(Node temp=dummyNode.next; temp.next!=null; temp=temp.next){
temp.data= null;
Node per = temp.next;
temp.next=null;
temp = per;
size--;
}
}
//检查是否包含某个数据
private static boolean contains(Object data){
for(Node temp = dummyNode.next; temp!=null; temp=temp.next){
if (temp.data == data) {
return true;
}
}
return false;
}
//将链表中的元素存在数组中
private static Object[] toArray(){
Object[] arr = new Object[size];
int i = 0;
for(Node temp=dummyNode.next; temp!=null; temp=temp.next){
arr[i] = temp.data;
i++;
}
return arr;
}
//判断索引值是否合理
private static void IsCheck(int index){
if(index<0||index>size){
System.out.println("索引值不合理!!");
}
}
//链表大小
public static int size(int size) {
return size;
}
//输出链表
private static void printf(){
for(Node temp = dummyNode.next; temp!=null; temp = temp.next){
System.out.print(temp.data+" ");
}
}
希望可以帮助到你。谢谢。`