zoukankan      html  css  js  c++  java
  • 链表中倒数第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 }
     
     
  • 相关阅读:
    关于dreamweaver的软件测评
    对于软件工程存在的疑问
    沈阳航空软件工程附加
    个人总结
    软件工程-构建之法 团队
    黄金点游戏
    第三周作业2
    第三周作业1
    作业2
    作业1
  • 原文地址:https://www.cnblogs.com/2390624885a/p/6690928.html
Copyright © 2011-2022 走看看