博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-链表中倒数第k个结点
阅读量:5330 次
发布时间:2019-06-14

本文共 1267 字,大约阅读时间需要 4 分钟。

题目:链表中倒数第k个结点

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

思路:先来看我的解法,

1.从头结点开始遍历整个链表,每到一个节点,k就减1

2.根据k最后的值开始讨论,

k>0 说明给的链表长度不够,不存在倒数第k个节点,返回null

k==0,说明倒数第k 个恰好为头结点,所以在遍历完链表后,k恰好减为0

k<0

此时再从链表头部往后走,每走一步,k加一,当k==0的时候,恰好就是倒数第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         ListNode tmp=head;13         while(tmp!=null){14             tmp=tmp.next;15             k--;16         }17         if(k>0)return null;18         else if(k==0) return head;19         else {20             while(k!=0){21                 head=head.next;22                 k++;23             }24             return head;25         }26     }27 }

再学习一下别人的算法:

思路:下面这个算法也很简洁,思想就是先定义两个指向头结点的指针,让其中一个指针先走k步,然后咱两一起走,等你到终点时,我刚好到达倒数第K个位置(因为你比我快了k步,而你此时在终点,那我必定在倒数第K个位置)

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     }

 

转载于:https://www.cnblogs.com/pathjh/p/9140613.html

你可能感兴趣的文章
解析xml文件的几种技术与Dom4j与sax之间的对比
查看>>
BZOJ 3210: 花神的浇花集会
查看>>
R条件筛选
查看>>
日期转周几
查看>>
Cin、Cout 加快效率方法
查看>>
GDAL Virtual Format Tutorial
查看>>
win7平台下使用MASMPlus搭建汇编环境
查看>>
oracle 可以连接数据库,vs连不上. 报错提示:ORA-12154: TNS: 无法解析指定的连接标识符...
查看>>
Trie树入门
查看>>
Java小知识点
查看>>
JS学习记录(DOM补充一)
查看>>
洛谷P3958 奶酪
查看>>
wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费(2)...
查看>>
SDN第一次作业
查看>>
Spark Mllib里决策树回归分析使用.rootMeanSquaredError方法计算出以RMSE来评估模型的准确率(图文详解)...
查看>>
如何查看kafka消费者信息?
查看>>
转】Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
【English】20190312
查看>>
Asp.net 后台添加CSS、JS、Meta标签
查看>>
windows下使用RoboCopy命令进行文件夹增量备份
查看>>