题目
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。
样例
给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.
解题思路
先看条件,只有表头,和倒数第n个数。
假如表有k个数,那倒数第n个节点,为正数第k-n+1个数,
因为是链表,所以不能倒序遍历。
最简单办法,遍历一次,获得链表长度k,然后找到第k-n+1个元素。
因为保证最少数量为n,所以不用考虑n > k的错误输入情况。
代码实现
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: Nth to last node of a singly linked list.
*/
ListNode nthToLast(ListNode head, int n) {
int k = 0;
ListNode p = head;
while(p != null)
{
k++;
p = p.next;
}
int orderNum = k - n + 1; //倒数第一个数本位占1,所以要加1.
p = head;
for(int i = 0; i < k - n; i++)
{
p = p.next;
}
return p;
}