题解

方法一:
单链表只能向后遍历,只要知道倒数第k个节点是顺数第几个节点即可。

public ListNode FindKthToTail(ListNode head,int k) {
        ListNode  cur = head;
        int count = 0;
        //第一遍遍历统计链表节点个数
        while(cur != null){
            count++;
            cur = cur.next;
        }
        ListNode temp = null;
       //倒数第k个节点,顺数第count - k + 1个,可以自己举个例子
        for(int i = 1; i <= count - k + 1; i++){
               if(head != null){
               temp = head;
               head = head.next;
               }else{
                   temp = null;
               }
               }
        return temp;
    }

方法二:快慢指针
快指针先遍历k个节点,之后快慢指针(慢节点指向的是第一个节点,快指针指向的是第k+1个节点)一起遍历,当快指针跳出的时候,慢指针指向的就是倒数第k个节点。

public ListNode FindKthToTail(ListNode head,int k) {
        if(head == null || k == 0){
            return null;
        }
        //统计快指针遍历节点的个数
        int count = 0;
        ListNode fast = head;
        ListNode slow = null;
        while(fast != null){
            count++;
            fast = fast.next;
           if(count >= k){
               slow = head;
               head = head.next;
           }
        }
        return slow;
    }

方法二比方法一更需注意一些边界条件:k=0和k>链表的总长度。

全部评论

相关推荐

想干测开的tomca...:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务