链表中倒数第k个结点
来源:互联网 发布:不能在淘宝上买球藻 编辑:程序博客网 时间:2024/06/08 18:42
链表中倒数第k个结点
1. 题目描述
输入一个链表,输出该链表中倒数第k个结点。
2. 解题思路
- 由于是单链表,遍历链表只能顺序遍历,也不能随机的访问
- 要求输出的是倒数第K个结点,可以将其换算成正向数的结点
- 首先需要计算出链表中一共有多少个结点
- 节点数减k就是该结点在链表中的位置(从0开始)
- 正向遍历链表即可解决问题
3. 解题代码
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode ln = head; if(ln == null) return null; else{ int length = 1; do{ length ++; ln = ln.next; }while(ln.next != null); if(k > length || k <= 0) return null; else{ int count = length - k; if(count == 0) return head; else{ ListNode listNode = head; for(int i = 0; i < count; i ++){ listNode = listNode.next; } return listNode; } } } }}
4.改进
代码思路如下:
两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了
链接:https://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a
来源:牛客网
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null||k<=0){ return null; } ListNode pre=head; ListNode last=head; for(int i=1;i<k;i++){ if(pre.next!=null){ pre=pre.next; }else{ return null; } } while(pre.next!=null){ pre = pre.next; last=last.next; } return last; }}
阅读全文
0 0
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第 k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 输出链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 链表中倒数第k个结点
- 链表中倒数第k个结点
- 查找链表中倒数第k 个结点
- 链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 链表中倒数第k个结点
- 链表中倒数第k个结点[数据结构]
- 链表中倒数第k个结点
- 1073 家族
- C#中可空值类型的一些细节
- iOS-数据结构
- hdu3338 Kakuro Extension(较难,好题) [最大流][数和]神奇最大流行进列出
- vb.net 教程 3-11 窗体控件综合编程 2-2
- 链表中倒数第k个结点
- iOS 输入金钱数目的TextField
- RabbitMQ第二课--java demo
- 免费照片、图片、图标、平铺背景网址收藏(来源css3 manual一书第三版289页)
- 第一篇
- 自定义注解实战案例——实现ORM映射
- Docker命令学习(二)
- 炸鸡
- 小笔记-java基础