《剑指offer》刷题笔记2
-
学习内容
这里的链表 含义是没有头结点的单链表。
链表中倒数第k个结点
(1)思路
pHead指向第一个结点。如果链表为空或者k=0,返回空。 如果链表不为空,只需要遍历一次链表。用两个指针,两个整型变量。一个指针保存答案,一个指针保存当前访问的结点。一个整型变量记录链表长度,每访问一个节点就加一;一个整形变量记录是否答案指针要后移,初始值为2-k,每访问一个节点就加一,当大于1时,答案指针要后移一位。 如果k大于链表长度,返回空。
(2)代码
/*
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :
val(x), next(NULL) {
}
};/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {if(pListHead==NULL||k==0)return NULL; int cnt=2-k,length=1; ListNode* p=pListHead; ListNode* ans=pListHead; while(p!=NULL) { if(cnt>1) { ans=ans->next; } p=p->next; length++; cnt++; } if(k>=length)return NULL; return ans;
}
};