单链表后篇-->(虚拟头)

dummyHead 有了虚拟头结点,所有的位置都有前驱。
怎么头插?

当前链表有节点时:让当前的对象指向要插入数的结点,然后dummyHead指向当前对象就行了。

node.next=dummyHead.next;   dummyHead.next=node;

当前链表没结点时:

node.next=dummyHead.next;   dummyHead.next=node;

为什么一样的代码。

为什么一样的代码? 因为虚拟头结点的存在大家都有前驱,因为当前链表没节点时:node.next=null,dummyHead.next=null 都是null。
有虚拟头结点后,所有结点都是该结点的“后继”,结点,无论当前是否存在有效元素,插入步骤一致,省去了判断头。

/**
 * 头插
 */
public class LinkedListWithHead {
    private  int size;
    private  Node dummyHead=new Node();

    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++;
    }

 

关于任意位置的插入代码: 找前驱走index步
在索引为Index 的位置插入新节点value
add(2,20)在索引为2的地方插入200
prev指针是从dummyHead开始走 走index步走到待插入位置的前驱结点
package seqlist;

/**
 * 初始化定义dummyHead
 */
public class LinkedListWithHead {
    private  int size;
    private  Node dummyHead=new Node();

    public class Node {
        int val;
        Node next;
 //    public Node(int val, Node next) {
//        
//    }
}
   //-------------插入部分--------------->
    /**
     * 头插
     */
    public void addFirst(int val){

        Node node
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值