题目描述
输入一个链表,输出该链表中倒数第k个结点。
提交代码:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead==NULL|| k<0) #第一步判断接收数据是否有误
{
return NULL;
}
ListNode* pre = pListHead;
ListNode* last = pListHead;
int i = 0;
while (pre!=NULL)
{
if (i<k) #找低k个数
{
pre = pre->next;
i++;
}
else #一起向后移动
{
pre = pre->next;
last = last->next;
}
}
if (i<k) #K过大
{
return NULL;
}
return last;
}
};
测试代码:
int main()
{
Solution *s = new Solution();
//vector<int> v = { 2,4,6,1,3,5,7 };
ListNode *l1 = new ListNode(1);
ListNode *l2 = new ListNode(2);
ListNode *l3 = new ListNode(3);
ListNode *l4 = new ListNode(4);
ListNode *l5 = new ListNode(5);
ListNode *l6 = new ListNode(6);
ListNode *l7 = new ListNode(7);
l1->next = l2;
l2->next = l3; l3->next = l4; l4->next = l5;
l5->next = l6; l6->next = l7;
ListNode* out_list =s->FindKthToTail(l1,3);
system("pause");
return 0;
}
结果: