zoukankan      html  css  js  c++  java
  • 25、输入一个链表,输出该链表中倒数第k个结点。

    输入一个链表,输出该链表中倒数第k个结点。

    提供两种思路。

    思路1:正常思维 

    一共有count个,倒数第k个就是正数第count-k+1,下标是count-k

     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)
    13             return null;
    14         int count = 0;
    15         ListNode temp = head;
    16         for (int i = 0; temp != null; temp = temp.next) {
    17             count++;
    18         }
    19         if(k>count)
    20             return null;
    21         System.out.println(count);
    22         for(int i = 0;i<count-k;i++){
    23             head = head.next;
    24         }
    25         return head;
    26     }
    27 }

    思路2:

    相当于制造了一个K长度的尺子,把尺子从头往后移动,当尺子的右端与链表的末尾对齐的时候,尺子左端所在的结点就是倒数第k个结点

     1 public class Solution {
     2     public ListNode FindKthToTail(ListNode head,int k) {
     3         ListNode pre=null,p=null;
     4         //两个指针都指向头结点
     5         p=head;
     6         pre=head;
     7         //记录k值
     8         int a=k;
     9         //记录节点的个数
    10         int count=0;
    11         //p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
    12         //当p指针跑到最后时,pre所指指针就是倒数第k个节点
    13         while(p!=null){
    14             p=p.next;
    15             count++;
    16             if(k<1){
    17                 pre=pre.next;
    18             }
    19             k--;
    20         }
    21         //如果节点个数小于所求的倒数第k个节点,则返回空
    22         if(count<a) return null;
    23         return pre;
    24             
    25     }
    26 }

    精简后:

     1 public ListNode FindKthToTail(ListNode head,int k) { //5,{1,2,3,4,5}
     2         ListNode p, q;
     3         p = q = head;
     4         int i = 0;
     5         for (; p != null; i++) {
     6             if (i >= k) 
     7                 q = q.next;
     8             p = p.next;
     9         }
    10         return i < k ? null : q;
    11     }
  • 相关阅读:
    数据提交方式:post和get
    什么是SQL注入式攻击和如何防范?
    CSS3 @keyframes 规则
    php数据库连接及简单操作
    深入理解CSS过渡transition
    css 选择器
    利用border制作三角形原理
    iOS 8 自适应 Cell
    dSYM 文件分析工具
    iOS开发使用半透明模糊效果方法整理
  • 原文地址:https://www.cnblogs.com/olivegyr/p/7067249.html
Copyright © 2011-2022 走看看