您的位置:首页 > Web前端

每日AC-剑指Offer 链表中倒数第k个结点

2017-06-01 09:01 621 查看

剑指Offer  链表中倒数第k个结点

时间限制:1秒 空间限制:32768K 热度指数:164855
本题知识点: 链表
 算法知识视频讲解


题目描述

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

没啥难度, 解决办法, 第一反应是用快慢指针方式实现, 也许C++ 写出来的感觉会更好,注意判断边界,异常情况等。

看源码:

public class ListNode {
public int val;
public ListNode next = null;

ListNode(int val) {
this.val = val;
}
}

AC代码:Java版本
public class FindKthToTailSolution {

public ListNode FindKthToTail(ListNode head,int k) {

if(head == null){
return head;
}
int size = 0;
ListNode tmp = head;
while(tmp != null){
tmp = tmp.next;
size++;
}

if(size < k){
return null;
}
// 快慢指针的方式求倒数第K个数
ListNode slow = head, fast = head;
int count = 0;
while(count < k){
fast= fast.next;
count++;
}

while(fast != null ){
fast = fast.next;
slow = slow.next;
}
return slow ;
}
/**
* @param args
*/
public static void main(String[] args) {

ListNode head = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);

head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = null;
ListNode ans = new FindKthToTailSolution().FindKthToTail(head, 2);
System.out.println(ans.val);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: