目录
一、虚拟头节点
二、单链表——增
1、在链表的头部插入val
2、在索引为index的位置插入值为val的节点
三、单链表——删除
1、删除单链表中索引为index的节点,返回删除前的节点值
2、删除链表中所有值为val的元素
一、虚拟头节点
dummyHead——只作为链表的头节点使用,不存储有效数据,链表中的其他节点我都可以一视同仁,每个节点都有前驱节点
二、单链表——增
1、在链表的头部插入val
public void addFirst(int val)
dummyHead——只作为链表的头节点使用,不存储有效数据,链表中的其他节点我都可以一视同仁,每个节点都有前驱节点
1、在链表的头部插入val
public void addFirst(int val)
public void addFirst(int val)
public void addFirst(int val){
Node node=new Node();
node.val=val;
node.next=dummyHead.next;
dummyHead.next=node;
// Node node=new Node(val,dummyHead.next); //此处利用构造方法简化代码
// dummyHead.next=node;
// dummyHead.next=new Node(val,dummyHead.next);此处使用匿名对象简化代码
size++;
}
2、在索引为index的位置插入值为val的节点
public void add(int index,int val)
public void add(int index,int val)
public void add(int index,int val){
if (index<0||index>index){
System.err.println("index不在范围内");
return;
}
Node prev=dummyHead;
for (int i = 0; i
三、单链表——删除
1、删除单链表中索引为index的节点,返回删除前的节点值
public int remove(int index)
public int remove(int index){
if (rangCheck(index)){
Node prev=dummyHead;
for (int i = 0; i
2、删除链表中所有值为val的元素
public void removeAllVal(int val)
当存在虚拟节点时,就不需要考虑头节点,prev是从dummyHead开始向后进行判断的,其他的逻辑和单链表的删除逻辑是一样的
public void removeAllVal(int val){
Node prev=dummyHead;
while(prev.next!=null){
//保证有后继节点
if (prev.next.val==val){
//此时prev.next就是待删除的值
prev.next=prev.next.next;
size--;
}else{
//此时prev.next.val!=val,才可以移动prev
prev=prev.next;
}
}
}



