快捷搜索: 王者荣耀 脱发

剑指offer(十四)——链表中倒数第k个结点

剑指offer(十四)——链表中倒数第k个结点

题目描述 输入一个链表,输出该链表中倒数第k个结点。 题解

public static ListNode FindKthToTail(ListNode head,int k) {
          
   
        ListNode postNode = null;
		ListNode preNode = null;
        if (k <= 0) {
          
   
			return postNode;
		}else {
          
   
			int flag = 0;
			postNode = head;
			preNode = head;
			while(preNode != null) {
          
   
				if (++flag > k) {
          
   
					postNode = postNode.next;
				}
				preNode = preNode.next; 
			}
			return k <= flag ? postNode : null;
		}

讲一下思路,就是设两个指针–前指针preNode和后指针postNode指向头结点head,前指针先移动,后指针等到前指针移动了k个结点后才开始移动,那么前指针遍历完整个链表时,后指针指向的便是倒数第k个结点。 注意k值大于整个链表长度的情况! 下面以k=2为例。 当pre指针到第2结点,post指针开始移动 当pre指针到到达终点时,post指针即为倒数第二个结点

经验分享 程序员 微信小程序 职场和发展