18.链表只能一个接着一个遍历,不允许通过随机访问
Practice-小白菜博客
7.链表的地址是连续的,通过内部的指针来进行访问
image

//假设该链表只给出了头指针 head。在不改变链表的前提下,请设计一个尽可能高效的算法,
//查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的 data值,并返回 1;否则,只返回 0。

int LList_Seek(LList_t *head,int k)
{
    if(NULL == head -> next)
    {
        perror("head is empty");
        return 0;
    }
    int cnt = 0;
    LList_t *p = head -> next;  //若指向头节点,则循环内不需要等于
    while(head ->next)
    {
        p = p -> next;
        cnt++;
    }
    p = head -> next;  //指针p返回到开头,若指向头节点,则循环内不需要等于
    for(int i = 0; i < (cnt-k); i++)
    {
        p = p -> next;
    }
    printf("%d\n",p -> data);

    return 1;
}

//遍历和比较得到最小的值所在的节点
int LList_Print(LList_t *Head)
{
	//对链表的头节点的地址进行备份
	LList_t *Phead = Head;
	LList_t *p = Head -> next;
    LList_t *ptr = Head -> next -> next;
    int min = p -> data;
	//首结点
	while(ptr->next)
	{
		if(ptr -> data < p ->data)
        min = ptr -> data;
	}
    printf("data = %d\n",ptr -> data);

    return ptr -> data;
}