链表中倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第k个结点。
 
  首先想到的肯定是先走到链表末尾,然后再回溯到k节点。但是注意本题是单链表,单链表的节点只有从前往后的指针,而没有从后往前的,因此要想别的思路。
 
  这样的话就需要别的思路。假设链表有n个节点,那么倒数第k个节点就是从头到尾的第n-k+1个节点,这样的话就从头到尾遍历链表,每经过一个节点,计数器加1即可得到链表节点数。当然要想一次遍历即可找到倒数
 
第k个节点,需要定义两个指针。第一个从链表头节点开始往前走k-1步,此时第二个指针保持不动;从第k步开始第二个指针和第一个同时开始遍历,只是第二个是从头节点,第一个是从第k个节点开始,两个指针之间保持的
 
距离为k-1,当第一个节点到达链表尾节点时,第二个链表正好到达倒数第k个节点。
 
当然一下问题会使程序崩溃:  
  
  1、输入的链表head为null
  
  2、以head为头结点的链表总数小于k
  
  3、k=0
 
 
因此要注意代码的鲁棒性
 
程序如下:
 1 /*
 2 public class ListNode {
 3     int val;
 4     ListNode next = null;
 5 
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }*/
10 public class Solution {
11     public ListNode FindKthToTail(ListNode head,int k) {
12         if(head == null||k <= 0) return null;
13         ListNode node = head;
14         int count = 0;
15         while(node != null){
16             count++;
17             node = node.next;
18             }
19         if(count<k) return null;
20         ListNode p = head;
21         for(int i = 0;i<count - k;i++){
22             p = p.next;
23         }
24         return p;  //
25     }
26 }

 

 
 
posted on 2017-04-10 21:05 粽子丫丫 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/2390624885a/p/6690928.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值