找倒数第K个结点的方法1:
正数的第length-k+1个,
缺点是时间复杂度高
HeadList *FindRecik(HeadList *head,int k)
{
if(head==NULL) exit(0);
int length=GetLength(head);//缺点在这
if(k>length) return NULL;
HeadList *p=head;
int i=0;
while(i<length-k+1)//画图即可明白如何表示位置
{
p=p->next;
i++;
}
return p;
}
找倒数第K个结点的方法2:
两个指针实现:p,q;q指针先走k个节点(并且判断一下k是否合法), 如果q不为空,则继续p和q同步向后走,直到q为空,p就是倒数第k个节点。此方法效率高。
HeadList *FindReciK2(HeadList *head, int k)
{
if (head == NULL) exit(0);
HeadList *p = head, *q = head; // 找到正数第k个节点,并且判断k是否合法
while (k && q != NULL)
{
q = q->next;
k--;
}
if (q == NULL) return NULL;
while (q != NULL)
{
q = q->next;
p = p->next;
}
return p;
}