题目描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。
样例
给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.
做题思路:利用两个头结点移动,P先走n-1个结点,之后p走一个,q就走一个,知道p指向空时,q就指向了倒数第n个结点。
关键代码:ListNode *nthToLast(ListNode *head, int n){
// write your code here
int i;
if(head==NULL||n<1)
return NULL;
ListNode *p=head;
ListNode *q=head;
for(i=0;i<n-1;i++)
{ if(p==NULL)
return NULL;
else { p=p->next;}
}
while(p->next!=NULL)
{ p=p->next;
q=q->next;
}
return q;
}
做题感想:刚开始这个题一点思路都没有,上网查了查,不明白为什么是n-1步,后来举了个例子,用实际的数字来表示n,用画图的方式,找到了规律。