发布博客主要是为了自己以后查阅起来方便,所以会把自己做的不好的方法也粘上,大家可以自己跳过,当然也欢迎各位指正一下小白的傻瓜代码。
数学逻辑推导:
书上的代码:
LNode *Search_k(LinkList l, int k) {
LNode *p = l->next;
LNode *q = l->next;
int count = 0;
while (q != NULL) {
if (count < k)
count++;
else
p = p->next;
q = q->next;
}
//判断k的合法性
if (count < k)
return NULL;
else
return p;
}
我的笨方法:
LNode *SearchNode(LinkList l, int k) {
int len = 0;
LNode *p = l;
//求出链表的长度
while (p->next != NULL) {
p = p->next;
len++;
}
if (k > len)
return NULL;
p = l;
int count = len - k + 1;
for (int i = 1; i <= count; i++) {
p = p->next;
}
return p;
}
k的合法性判断:
可以取一个极端例子:
count与k的大小关系有三种情况:当count<k的时候,如果k不合法,可能会使count还小于k的时候q就为空循环结束;当count=k的时候,如上图所示,k=len;此外,count的取值不可能大于k。
因此,最后count的结果只有等于k,即k值合法;或者是小于k,即k值不合法。