LeetCode-面试题22. 链表中倒数第k个节点

题目

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

示例

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

解题思路

设置两个指针,先让一个指针走k步,然后两个指针同时走,最先走的指针到达末尾时,后面的指针刚好位于倒数第k个位置.

代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        //特殊情况处理
        if(head == null || k == 0){
            return null;
        }
        
        ListNode p1 = head;
        ListNode p2 = head;
        int i = 0;
        while(i<k){
            if(p2 != null){
                 p2 = p2.next;
                 i++;
            }else{//链表长度小于k
                return null;
            }
        }
        while(p2!=null){
            p1 = p1.next;
            p2 = p2.next;
        }
        return p1;
    }
}

效率

LeetCode-面试题22. 链表中倒数第k个节点_第1张图片

你可能感兴趣的:(LeetCode)