输入一个链表,输出该链表中倒数第k个节点
从1开始计数,即链表的尾节点是倒数第1个节点
1、确定链表长度length
2、判断k的有效性,无效返回null
3、遍历单链表,并记录当前结点是倒数第 ? 个结点
?的计算方式为链表长度length - index(index 从 0,1,... length)
如length = 6,index = 0,则当前结点是倒数第 6 个结点
length = 6,index = 1,则当前结点是倒数第 5 个结点
4、当 ?等于 k 时,输出当前结点
public static ListNode getKthFromEnd(ListNode head, int k){ ? // 链表长度 int listLength = getLength(head); // 判断k的有效性 if (k <= 0 || k > listLength){ return null; } // 遍历单链表 int index = 0; ListNode current = head; while (current != null){ // 倒数索引 int countDownIndex = listLength - index; ? if (countDownIndex == k){ return current; } ? current = current.next; index ++; } return null; } ? // 求链表长度 public static int getLength(ListNode node){ ? if (node == null){ return 0; } ? int length = 0; ListNode temp = node; while(temp != null){ length ++; temp = temp.next; } ? return length; }
原文:https://www.cnblogs.com/LittleSkinny/p/14419537.html