实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意:本题相对原题稍作改动
示例:
输入: 1->2->3->4->5 和 k = 2 输出: 4
说明:
给定的 k 保证是有效的。
int kthToLast(struct ListNode* head, int k)
{
assert(head!=NULL);
//题目说明可省略k合理性判断
//创建一个假头结点
struct ListNode* plist=(struct ListNode*)malloc(1*sizeof(struct ListNode));
assert(plist!=NULL);
plist->next=head;
//定义两个指针 p q都指向假头结点
struct ListNode* p=plist;
struct ListNode* q=plist;
//让指针p先走k步
for(int i=0;i<k;i++)
{
p=p->next;
}
//此时 p q同时向后面走,p==NULL时,q指向倒数第k个节点
while(p!=NULL)
{
p=p->next;
q=q->next;
if(p==NULL)
{
return q->val;
}
}
return;
}