《剑指offer》——链表中倒数第k个结点

60 篇文章 3 订阅

更多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),也可扫下方二维码关注获取最新文章哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值