剑指offer--链表中倒数第k个结点-java
来源:互联网 发布:网络有利还是有害 编辑:程序博客网 时间:2024/05/19 18:16
题目描述:
输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)
输入:1 2 3 5 7 10
输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)
解题思路:
首先我们考虑到,用普通的思想,获取链表的长度,然后输出第length-k个元素的值,就是倒数第k个元素的值了。但是考虑到面试的技巧,这种方法还是不行的,但是做题时可以AC的。但是考虑的复杂点,如果时间复杂度为O(n)呢,一次扫描是不可能获取长度,又输出的。因此采取判断链表循环的思路,采用两个指针,第一个指针提前k-1步向下走,第二个指针再随着第一个指针一直走。知道第一个指针指向末尾,第二个指针的元素的值,便是我们所要求得的值。
具体Java实现代码如下:
import java.util.Scanner;public class SolutionKth {public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}//创建链表public ListNode CreateList(int[] array){ListNode head=new ListNode(array[0]);head.next=null;ListNode p=head;for(int i=1;i<array.length;i++){ListNode q=new ListNode(array[i]);q.next=null;p.next=q;p=q;}return head;}//打印链表中的元素public void Print(ListNode head){ListNode p=head;while(p!=null){System.out.print(p.val+" ");p=p.next;}}//寻找链表中的倒数第K个数public ListNode FindKthToTail(ListNode head,int k) {if(k<=0)return null;if(head==null)return null;ListNode p=head;ListNode q=head;int i=1;while(p.next!=null){if(i<k){p=p.next;i++;}else{p=p.next;q=q.next;}}if(i<k)return null;return q; }public static void main(String[] args){Scanner sc=new Scanner(System.in); String input=sc.nextLine(); String[] inputlist=input.split(" "); int[] array=new int[inputlist.length]; for(int i=0;i<inputlist.length;i++) { array[i]=Integer.parseInt(inputlist[i]); } SolutionKth sk=new SolutionKth(); ListNode head=sk.CreateList(array); sk.Print(head); ListNode result=sk.FindKthToTail(head, 2); //此处程序中将k设置为2了,可根据需要修改 System.out.print(result.val);}}
输入:1 2 3 5 7 10
输出:7
0 0
- 剑指offer--链表中倒数第k个结点-java
- 剑指offer:链表中倒数第k个结点(java)
- 剑指Offer之链表中倒数第k个结点
- 剑指offer-15:链表中倒数第k个结点
- 剑指offer系列源码-链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点
- 剑指Offer之 - 链表中倒数第k个结点
- 剑指offer:链表中倒数第k个结点(链表)
- 剑指Offer-链表中倒数第k个结点
- 剑指offer——链表中倒数第k个结点
- 链表中倒数第k个结点(剑指offer)
- 《剑指offer》链表中倒数第k个结点
- 剑指 offer:链表中倒数第k个结点
- 剑指offer—链表中倒数第k个结点
- 《剑指offer》——链表中倒数第k个结点
- [剑指offer-1517]链表中倒数第k个结点
- 剑指offer 链表中倒数第k个结点
- 剑指offer-链表中倒数第k个结点
- 矩阵的LU分解———学习笔记 ,转载自chinaunix
- hibernate修改数据库已有的对象【简化操作】
- Arduino制作温湿度计
- C++引用&概念及用法
- 异常
- 剑指offer--链表中倒数第k个结点-java
- UDP传输中文乱码、异常解决
- C++成员变量的初始化顺序问题
- 设计模式之单例模式
- Android入门——利用Canvas完成绘制点、圆、直线、路径、椭圆、多边形等2D图形
- 微信公众平台初试
- 九度OJ 1533 最长上升子序列 (基于贪心和二分查找)
- android studio 代码修复提示快捷键
- 用链表实现队列