【数据结构 - 5链表的增删查改-1】

上篇文章中,我们已经将链表成功创建,接下来,我们就对链表进行基本操作

(这么认真的up主,真的不给个三连嘛~)

1.遍历链表

  和顺序表一样,在对链表进行增删查改之前,要先对链表进行遍历,以方便我们后续的操作

  那么如何遍历我们的数组呢,其实很简单,我们只需要让head = head.next。如图

想要打印所有值,还需一个循环,循环条件是head !=null,如图,head为空,即head走到了56后面的位置,所有元素也就随之遍历完成

但是,用head,等链表遍历完成之后,则会不知道整个链表的头在哪,所以,我们可以定义一个引用(cur),让这个引用等于head,并且代替head往下遍历

代码如下

 public void display() {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val+" ");
            cur = cur.next;//cur每次向后走一部
        }
        System.out.println();
    }

在测试类进行方法调用

代码如下

public class test {
    public static void main(String[] args) {
       MySingleList mySingleList = new MySingleList();
       mySingleList.createList();
       mySingleList.display();
    }
}

运行结果

 2.得到链表长度

这个基本逻辑与遍历相同,这里不多做赘述,不同点是要定义一个计数器,每走一步计数器加一下每走一步计数器加一下,在修改返回值,去掉打印即可得到链表长度

代码如下

public int size(){
        int count = 0;
        ListNode cur = head;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
    }

测试调用

public class test {
    public static void main(String[] args) {
       MySingleList mySingleList = new MySingleList();
       mySingleList.createList();
       //mySingleList.display();
        System.out.println(mySingleList.size());
    }
}

运行截图 

3.判断链表中是否包含关键字key

逻辑上同,只需要在循环中加一个判断,key是否等于val,返回true或false

代码如下

 public boolean contains(int key){
        ListNode cur = head;
        while (cur != null) {
            if(cur.val == key) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

调用测试

public class test {
    public static void main(String[] args) {
       MySingleList mySingleList = new MySingleList();
       mySingleList.createList();
       //mySingleList.display();
        //System.out.println(mySingleList.size());
        System.out.println(mySingleList.contains(12));
    }
}

运行截图

4.头插法

顾名思义,就是将一个节点插到链表的最前面,我们还是老规矩画图进行理解,我们先定义一个node节点如图

那么我们要怎么做才能将node插入到链表中呢,如图。我们先让node.next= head,之后再让node成为新的head,即head = node

代码如下

public void addFirst(int data){
    ListNode node = new ListNode(data);
    node.next = head;
    head = node;
}

测试调用

public class test {
    public static void main(String[] args) {
       MySingleList mySingleList = new MySingleList();
       mySingleList.createList();
       mySingleList.display();
       
        mySingleList.addFirst(10);
        mySingleList.display();
    }
}

运行截图

 本篇文章我们主要介绍了遍历链表,得到链表长度,判断是否包换关键字key以及头插法,下一篇文章,我们将继续介绍链表有关的方法,敬请期待叭~

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值