单链表基础练习题

这篇博客介绍了单链表的基础练习,包括创建节点类、计算链表长度、查找倒数k节点、反转链表、逆序打印链表以及合并有序链表。此外,还提供了详细的代码实现和合并链表的两种排序方法。
摘要由CSDN通过智能技术生成

单链表基础练习

提供节点类

class NewInteger{
   
    private int number;
    private NewInteger next;

    public NewInteger(int number){
   
        this.number = number;
    }

    public int getNumber() {
   
        return number;
    }

    public void setNumber(int number) {
   
        this.number = number;
    }

    public NewInteger getNext() {
   
        return next;
    }

    public void setNext(NewInteger next) {
   
        this.next = next;
    }

    public String toString(){
   
        return "["+number+"]";
    }
}

获取单链表节点个数

    /**
     * 返回链表长度
     *
     * @return
     */
    public int getCount() {
   
        //创建辅助节点,循环
        NewInteger temp = head.getNext();
        int count = 0;
        while (temp != null) {
   
            count++;
            //辅助节点后移
            temp = temp.getNext();
        }
        return count;
    }

查找倒数第k个节点

//    查找倒数第几个节点
    public NewInteger getLastP(int index){
   
        NewInteger temp = head.getNext();
        if (index <= 0 || index > this.getCount(){
   
            return null;
        }
        for (int i = 0; i < getCount()-index; i++){
   
            temp = temp.getNext();
        }
        return temp;
    }


反转单链表

//两种方式:如下   
//反转链表(指针指向反转)
    public void reverseLinked(){
   
        //当前节点的前一个节点
        NewInteger pre = null;
        //当前节点
        NewInteger temp = head.getNext();
        //当前节点后一个节点
        NewInteger next;
        //如果链表没有节点,或只有一个节点,不用反转
        if (temp == null || temp.getNext() == null){
   
            return;
        }
        //循环到当前节点为null时结束
        while (temp != null){
   
            //保留当前节点的下一节点信息
            next = temp.getNext();
            //将当前节点的下一节点指向他的前一节点
            temp.setNext(pre);
            //pre后移
            pre = temp;
            //temp后移
            temp = next;
        }
        //将头节点后一个节点设置为pre
        head.setNext(pre);
    }
//*******************************************************8
    //反转链表使用栈
    public void reverseByStack(){
   
        NewInteger temp = head.getNext();
        Stack<NewInteger> newInteger = new Stack<>();
        //链表为空或只有一个节点则不用反转
        if (temp == null || temp.getNext() == null){
   
            return;
        }
        while (temp != null){
   
            newInteger.push(temp);
            temp = temp.getNext();
        }

        while (newInteger.size() != 0){
   
            System.out.println(newInteger.pop());
        }
    }
基础数据结构Java编程中非常重要的一部分,练习题可以帮助我们巩固对这些数据结构的理解和使用。下面是一些常见的Java基础数据结构练习题: 1. 数组反转:编写一个方法,将给定的数组按照逆序进行排列。 2. 查找元素:编写一个方法,在给定的有序整数数组中查找指定元素,返回其索引;如果不存在,则返回-1。 3. 字符串反转:编写一个方法,将给定的字符串按照逆序进行排列。 4. 链表逆序:编写一个方法,将给定的单链表进行逆序排列。 5. 栈的应用:使用栈来检查给定的括号序列是否合法,例如{[()]}是合法的,而{[(])}是非法的。 6. 队列的应用:使用队列来实现热土豆游戏,每经过指定的时间,队列中的土豆将被传递给下一个人,最后队列中剩下的人即为胜者。 7. 哈希表应用:实现一个电话号码簿,可以添加、删除和查找联系人信息。 8. 树的遍历:实现二叉树的前序、中序和后序遍历算法。 9. 图的最短路径:使用Dijkstra算法求解给定图中两个节点的最短路径。 10. 排序算法:实现常见的排序算法,如冒泡排序、插入排序和快速排序。 通过这些练习题的学习和实践,我们可以巩固对基础数据结构的理解和运用,提高自己的编程能力。同时,这些题目也是我们面试和应聘工作中常见的考察点,掌握这些知识也有助于我们在求职过程中脱颖而出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值