查找链表中倒数第k个节点

查找链表中倒数第k个节点


1.题目描述

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

示例:

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

返回链表 4->5.

本题对应剑指offer 22


2.解法

第一种解法是,先求出链表长度length,然后length-k即为所查找的节点,思路简单明了。

public ListNode getKthFromEnd(ListNode head, int k) {
    //
    if(head == null){
       return null;
    }
   	ListNode cur = head;
    int length = 0;
    while(cur != null){
       length++;
       cur = cur.next;
    }
    ListNode temp = head;
    for(int i = 0;i<length-k;i++){
        temp = temp.next;
    }
    return temp;
}

第二种解法是双指针,双指针也是这类问题的一种标准解法,利用双指针的话,可以不用统计链表长度

 public ListNode getKthFromEnd(ListNode head, int k) {
     ListNode slow=head;
     ListNode fast=head;
     int index = 0;
     while(fast!=null){          
         if(index>=k) slow=slow.next;
         fast = fast.next;
         index++;
     }
     return slow;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页