数据结构-链表

访问Access O(N)

搜索 O(N) 不知道内存地址

插入 O(1)

内存中随便找一个位置,插入数,断开插入位置上一个数的next指针,把上一个数的next指针指向插入的数,把插入数的next指针指到下一个下一个数

删除 O(1)

把上一个数的next指针断开,把要删除的数的next指针断开,把上一个的数的next指针直接指向下一个的数

链表数据结构的读很慢,写很快

链表的常见操作

1.创建链表

LinkedList<Interger> List = new LinkedList<>();

2.添加元素

list.add(1);

list.add(2);

链表尾端依次次插入

list.add(2,99);   

//在2位置插入99     O(1)因为找到索引为2的位置需要从头到尾找

3.访问元素

list.get(2);

4.搜索元素

int index=list.indexOf(99);  

//搜索链表中元素为99的位置   O(N)

5.更新元素

list.set(2,88);  

把第二个位置的值变成88

6.删除元素

list.remove(2);

//把第二个元素的位置删除  O(n)  原因是从头到尾遍历找到索引为2的位置

7.长度

list.size();

203题

 设置一个dummy指针,dummy.next=head,这样就算head移动遍历的时候,也有指针可以代替头指针,

设置一个prev指针作为head的前一个,prev.next=dummy,这是最开始的地址,prev的next始终是head,

while(head!=null){
            if(head.val==val){
                prev.next=head.next;
                head=head.next;
            }
            else{
                prev=head;
                head=head.next;
                
            }
        }

当head不为空的时候,依次遍历搜索,当链表中的值和val值相等的时候,prev.next直接指向val的next    head也往后移,这样就删除了链表中的val

当遍历到不与val相等的值的时候,为了不改变链表结构,prev的指向改变,head指针往后移,继续遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值