/*
* ==============================================================
* File name: linkedlist_delete_at_position.c
* Author: 3360652783@qq.com
* Date created: 2026-07-23
* Description: Delete a node from singly linked list at specified position (1-based).
* Copyright notice: All right Reserved.
* ==============================================================
*/
//构建删除单向循环链表中第k个结点的函数
bool DestNode_del(*L,int k){
CirLinkList *temp = L->next;
if( L->next == L ){ //如果链表为空,则返回false
return false;
}
if( k==1 ){ //删除第一个结点
L->next = L->next->next;
temp->next = NULL;
free(temp);
return true;
}
int j = 1;
CirLinkList *P = L->next; //p用于指向当前结点
CirLinkList *P_prev = L; //p_prev用于指向当前结点的直接前驱结点
while( p->next != L->next ){ //当前结点向后移动找第k个结点
p_prev = p;
p = p->next;
j++;
if( j == k ){ //找到第k个结点并删除它
p_prev->next = p->next;
p->next = NULL;
free(p);
return true;
}
}
return false; //k值大于结点个数,k值违法,删除失败
}