单链表的逆置以及倒数第K个元素的值

本文介绍单链表的逆置算法实现及其原理,并提供了一种求解单链表中倒数第K个元素的方法。通过定义新头结点和前驱结点来完成链表逆置;利用双指针技巧,设置固定长度移动来找到倒数第K个元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表的逆置

逆置原理:地址的交换
这里写图片描述
这里写图片描述

public Entry revers(){
        Entry newHead = null;//定义一个新的头结点用来输出逆置后新的头结点
        Entry prev = null;//定义一个前驱(为了达到逆置使前后结点的next逆置使用到)
        Entry cur = head;//定义一个一定的头结点
        while (cur!=null){
            Entry curNext = cur.next;//把
            if(curNext == null){
                newHead = cur;
            }
            cur.next = prev;
            prev = cur;
            cur = curNext;
        }
        head = newHead;
        return head;
    }

单链表的倒数第K个元素的值

原理:求倒数第k,则设立一个k-1固定长度,使这个固定长度一直后移,直到固定长度的末端到达链表的末端,则固定长度的前端就是倒数第k个元素的位置
这里写图片描述

    public int lastK(int k){
        if(k<0||k>getLength()){//保证稳定性,判断倒数K是否在该链表长度范围之内
            return -1;
        }   
        Entry cur1 = head;
        Entry cur2 = head;
        while(k-1>0){//先使一个结点走K-1的长度,为了和前一个结点保持k-1个长度
            if(cur2.next != null){
                cur1 = cur2.next ;
                --k;
            }else{
                return -1;
            }
        }
        //保持K个长度后,两个节点同时一起走
        while(cur2.next !=null){
            cur1 = cur1.next;
            cur2 = cur2.next;
        }
        if(cur2.next ==null ){//直到先走的结点指向null,则前一个结点指向的就是倒数第K个结点
            return cur1.data ;
        }else{
            return -1;
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值