Find the nth to last element of a singly linked list.
The minimum number of nodes in list is n.
Example
Given a List 3->2->1->5->null and n = 2, return node whose value is 1.
解题思路:
采用双指针,一前一后,间隔n个距离。一起移动,前指针指向尾部NULL时,后指针刚好指向的是倒数n的位置。
这种方法只遍历一次即可得到结果。
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/*
* @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)
{
// write your code here
//将currentNode初始指向第n个节点
ListNode * currentNode = head;
for(int i=0;i<n;i++)
currentNode = currentNode->next;
//将BeforeNode初始指向头节点
ListNode * BeforeNode = head;
//两指针一起移动,直到currentNode指向尾部
while(currentNode != NULL)
{
currentNode = currentNode->next;
BeforeNode = BeforeNode->next;
}
//此时currentNode指向null,BeforeNode则为倒数n的节点
return BeforeNode;
}
};