写在前面:
为了增长一下自己的数据结构能力,也为了面试准备,准备将剑指Offer做一下,并与各位分享,希望各位可以对代码以及思路提提建议,欢迎志同道合者,谢谢。
题目
输入一个链表,输出该链表中倒数第k个结点。
思路:
1-2-3-4-5-6-7
7个数据的链表,我想找到倒数第2个数据也就是6
我们先遍历这个链表查询总数据的个数,看看查询的索引是否超标,
这个链表长度为7,我们查询倒数第2个数据,也就是正数第六个,索引是5
输出这个数据
代码实现
package com.itzmn.offer;
import java.util.List;
/**
* @Auther: 张梦楠
* @Date: 2018/7/30 10:11
* 简书:https://www.jianshu.com/u/d611be10d1a6
* 码云:https://gitee.com/zhangqiye
* @Description:
*/
public class Offer14 {
public static void main(String[] args) {
new Offer14().init();
}
private void init() {
ListNode listNode = new ListNode(2);
ListNode listNode1 = new ListNode(3);
ListNode listNode3 = new ListNode(4);
ListNode listNode4 = new ListNode(5);
ListNode listNode5 = new ListNode(6);
listNode.next = listNode1;
listNode1.next = listNode3;
listNode3.next = listNode4;
listNode4.next = listNode5;
ListNode listNode2 = FindKthToTail(listNode, 5);
System.out.println(listNode2.val);
}
public ListNode FindKthToTail(ListNode head,int k) {
ListNode temp = head;
int count = 0;
while (temp != null){
count ++;
temp = temp.next;
}
System.out.println(count);
if (k > count || k <= 0){
return null;
}
int j=0;
while (j<count-k){
j++;
head = head.next;
}
return head;
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
}
希望大家可以多多指点,优化一下,
QQ群:552113611