Practice

WJnuHhail發表於2024-04-23

18.連結串列只能一個接著一個遍歷,不允許透過隨機訪問
image
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;
}

相關文章