美文网首页
剑指offer:链表中倒数第k个结点

剑指offer:链表中倒数第k个结点

作者: 衣介书生 | 来源:发表于2018-04-05 14:58 被阅读26次

    题目分析

    输入一个链表,输出该链表中倒数第k个结点。

    代码

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindKthToTail(ListNode head,int k) {
            // k 的特殊情况
            if(k <= 0) {
                return null;
            }
            
            // 链表为空
            if(head == null) {
                return null;
            }
            
            // 链表不为空但是链表长度不足 k
            ListNode temp = head;
            int l = 0;  // 记录链表长度
            while(temp != null) {
                temp = temp.next;
                l += 1;
            }
            if(l < k) {
                return null;
            }
            
            // 长度刚好为 k,提高效率
            if(l == k) {
              return head;
            }
            
            // 正常情况,快慢指针
            ListNode fast = head;
            ListNode slow = head;
            for(int i = 0; i < k - 1; i++) {
                fast = fast.next;
            }
            while(fast.next != null) {
                fast = fast.next;
                slow = slow.next;
            }
            
            return slow;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指offer:链表中倒数第k个结点

          本文链接:https://www.haomeiwen.com/subject/meeyfftx.html