问题描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。
样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1。
解题思路:创建一个新的链表,令这个新链表的头指针向后移动n次,然后令新链表和系统给的链表一起循环,知道新链表指针成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 *xin;
xin=head;
if(n<=0)
{return NULL;}
for(int i=1;i<=n;i++)
{
xin=xin->next;
}
while(xin!=NULL)
{
xin=xin->next;
head=head->next;
}
return head;
}
};
个人感悟:试验中返回的值与所期望的值有一个节点的差距,通过实验数据确定返回head还是head->next。