提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
描述
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。
样例
给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.
解题思路
使用双指针法,一个指针先走k-1步,另一个指针和前一个指针一起走,前一个指针到达末端后,前一个指针即是倒数第k的节点。
实现代码
/**
* 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
ListNode* p1=head;
ListNode* p2=head;
int i=0;
while(i<n)
{
p1=p1->next;
i++;
}
while(p1)
{
p1=p1->next;
p2=p2->next;
}
return p2;
}
};