18.鏈表只能一個接著一個遍歷,不允許通過隨機訪問 7.鏈表的地址是連續的,通過內部的指針來進行訪問 //假設該鏈表只給出了頭指針 head。在不改變鏈表的前提下,請設計一個儘可能高效的演算法, //查找鏈表中倒數第k(k為正整數)個位置上的結點。若查找成功,演算法輸出該結點的 data值,並返回 1; ...
18.鏈表只能一個接著一個遍歷,不允許通過隨機訪問
7.鏈表的地址是連續的,通過內部的指針來進行訪問
//假設該鏈表只給出了頭指針 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;
}