小渣渣的算法学习笔记:2018秋招备战
数据结构类算法总结:链表
数据结构类算法总结:链表
1.题目描述:
输入一个链表,输出该链表中倒数第k个结点
2.代码实现:
public class Solution22 { private static class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public static void main(String[] args) { ListNode l1 = new ListNode(5); ListNode l2 = new ListNode(3); ListNode l3 = new ListNode(2); ListNode l4 = new ListNode(6); ListNode l5 = new ListNode(8); ListNode l6 = new ListNode(9); l1.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; l5.next = l6; Solution22 s = new Solution22(); int k = 5; ListNode l = s.FindKthToTail(l1,k); if(l != null){ System.out.println(String.format("链表中倒数第%d个结点值为%d",k,l.val)); }else{ System.out.println(String.format("链表中倒数第%d个结点不存在",k)); } } public ListNode FindKthToTail(ListNode head,int k){ //如果头结点为空或者链表没有第k个结点 if(head == null || k == 0) return null; //两个指针遍历链表,让其中一个速度快些 ListNode ahead = head; ListNode behead = null; //如果结点总数小于k,返回空 for(int i = 0;i < k-1;++i){ if(ahead.next != null){ ahead = ahead.next; }else{ return null; } } behead = head; while(ahead.next != null){ ahead = ahead.next; behead = behead.next; } return behead; } }