zoukankan      html  css  js  c++  java
  • 14链表中倒数第k个结点

    题目描述

    输入一个链表,输出该链表中倒数第k个结点。
     
    思路:
    快慢指针

    快指针 先走k 步, 然后快慢指针一起走
    当快指针走到null 时, 慢指针就是所求的倒数第k个节点


    tips:
    判断k是否越界是在快指针走的时候
     
     
     1 public class Solution {
     2     public ListNode FindKthToTail(ListNode head,int k) {
     3         // 边界条件
     4         if(head==null||head.next==null) return head;
     5         ListNode fast = head;
     6         ListNode slow = head;
     7         for(;k>0;k--){
     8             //如果k越界
     9             if(fast==null) return null;
    10             fast=fast.next;
    11         }
    12         while(fast!=null){
    13             fast=fast.next;
    14             slow=slow.next;
    15         }
    16         return slow;
    17     }
    18 }
     1 public class Solution {
     2     public ListNode FindKthToTail(ListNode head,int k) {
     3         if(head == null || head.next==null) return head;
     4         ListNode fast = head;
     5         ListNode slow = head;
     6         for(int i = 0;i<k;i++){
     7             if(fast==null) return null;
     8             fast = fast.next;
     9             
    10         }
    11         while(fast!= null){
    12             fast = fast.next;
    13             slow =slow.next;
    14         }
    15         return slow;
    16     }

    20180307

     1 public class Solution {
     2     public ListNode FindKthToTail(ListNode head,int k) {
     3             if(head==null) return head;
     4             int cnt = 0;
     5             ListNode fast = head;
     6             ListNode slow = head;
     7             for(ListNode root = head;root != null;root = root.next)
     8                 cnt++;
     9             if(k>cnt||k<=0)return null;
    10             for(int i = 0;i<k;i++)
    11                 fast = fast.next;
    12             while(k!=0 && fast!=null){
    13                 fast = fast.next;
    14                 slow = slow.next;
    15             }
    16             return slow;
    17     }
    18 }

    C++:20180808

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6             val(x), next(NULL) {
     7     }
     8 };*/
     9 class Solution {
    10 public:
    11     ListNode* FindKthToTail(ListNode* head, unsigned int k) {
    12         if(head==NULL) return NULL;
    13         ListNode* fast = head;
    14         ListNode* slow = head;
    15         for(;k>0;k--){
    16             if(fast==NULL)
    17                 return NULL;
    18             fast = fast->next;
    19         }
    20         while(fast!=NULL){
    21             fast = fast->next;
    22             slow = slow->next;
    23             }
    24         return slow;
    25         }
    26 };
  • 相关阅读:
    一个十年java程序员的心得
    程序员每天应该思考的5个问题,你有思考过吗?
    Java---Java的面试题(二)
    Java---Java的面试题(一)
    java中的几种取整函数
    mysql ,为什么一张表的varchar关联另一张表varchar执行失败的一个原因
    可注册两位字母+两位数字com域名大全(到2016-5-12:12时候)
    更改(修改)mysql自动增序列改变从1000开始
    HTTP状态码(HTTP Status Code)
    struts2、jsp的简单路径的简单拦截
  • 原文地址:https://www.cnblogs.com/zle1992/p/7840795.html
Copyright © 2011-2022 走看看