数组地址是连续的,且大小不可变
链表地址不连续,方便删除。
应用:内存条主要用数组存储,他快。磁盘删除应用比较多,链表方便。
对链表进行学习
栈中先要main方法入栈
new:在堆内存开辟一个内存空间,创建对象
类是创建对象的模板
对象名只想我们的地址
类型 对象名 = new 类型();
类型控制着我们对地址的引用;
LInklist类
package Shujujiegou;
public class LInkList {
Node head = null;//定义头节点
//尾插法
public void insert(int val){
//创建节点
Node node = new Node(val);
if(head == null){
head = node;
return;
}
//定义指针
Node indexNode = head;
while(indexNode.next != null){
indexNode = indexNode.next;
}
indexNode.next = node;
}
//头插法
public void Headinsert(int val){
Node node = new Node(val);
if (head == null){
head = node;
return;
}
node.next = head;
head = node;
}
//输出遍历
public void printLink() {
Node indexNode = head;
while (indexNode != null) {
System.out.println(indexNode.val);
indexNode = indexNode.next;
}
}
//输出列表的长度
public int GetLength(){
int length = 0;
Node indexNode = head;
while (indexNode != null){
length++;
indexNode = indexNode.next;
}
return length;
}
public boolean contains(int val){
Node indexNode = head;
while (indexNode != null){
if (indexNode.val == val){
return true;
}
indexNode = indexNode.next;
}
return false;
}
//执行位置插入
public void addNodeAtIndex(int val,int index){
if (index == 0){
Headinsert(val);
}
else if (index == GetLength()){
insert(val);
} else{
Node node = new Node(val);
Node indexNode = head;
Node tempNode = null;
int position = 0;
while (indexNode != null){
if (position == index){
node.next = indexNode;
tempNode.next = node;
return;
}
tempNode = indexNode;
indexNode = indexNode.next;
position++;
}
}
}
//指定位置删除
public void delete(int index){
if(index > GetLength() ||index <= 0){
System.out.println("请输入在范围内的数");
}
if (index == 1){
head = head.next;
}
Node indexNode = head;
Node tempNode = null;
int position = 0;
while (indexNode != null){
if (position == index-1){
tempNode.next = indexNode.next;
return;
}
if (position == GetLength()){
indexNode = null;
}
tempNode = indexNode;
indexNode = indexNode.next;
position++;
}
}
}
Node类
package Shujujiegou;
public class Node {
Integer val;//定义一个节点的值
Node next;//定义下一个结点的值,我们这里要与类名保持一致,只有这样才能记录下一个节点
public Node(Integer val){
this.val = val;
}
}
Test类
package Shujujiegou;
public class Test {
public static void main(String[] args){
LInkList lInkList = new LInkList();
lInkList.insert(1);
lInkList.insert(4);
lInkList.insert(7);
lInkList.Headinsert(8);
lInkList.delete(4);
lInkList.printLink();
}
}