更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
T:
题目描述
输入一个链表,输出该链表中倒数第k个结点.
这种考题是比较简单的一种,以前也碰到过类似的题目,从耗时来说,一般都是使用两个指针,一前一后的走,中间间隔k或者k-1个步长,这个视判断语句而定。当前一个指针走到末端时,后一个指针正好落在倒数第k个节点处,直接返回该节点。
code:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
/**
* T:链表中倒数第k个结点
*
* 题目描述
* 输入一个链表,输出该链表中倒数第k个结点。
*
* date: 2015.11.13 20:22
* @author SSS
*
*/
public class Solution {
/**
* 前后两个指针,间隔为k-1个距离即可,前一个指针走了k步之后,后一个指针也从原点出发,
* 当前一个指针走都末尾了之后,第二个指针停留的位置就在倒数第k个节点上,返回即可。
* @param head
* @param k
* @return
*/
public ListNode FindKthToTail(ListNode head,int k) {
int postIndex = 0;
ListNode targetNode = head;
if (k <= 0 || head == null) {
return null;
}
ListNode node = head;
int count = 0;
while (node != null) {
if (postIndex ++ >= k) {
targetNode = targetNode.next;
}
node = node.next;
count ++;
}
// 是否k的值大于了链表的长度
if (count < k) {
return null;
}
return targetNode;
}
}
更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~