单向循环链表删除指定位置(第k个结点)结点,成功返回true,失败返回false

📅 2026/7/23 23:44:40 👁️ 阅读次数 📝 编程学习
单向循环链表删除指定位置(第k个结点)结点,成功返回true,失败返回false
/** ==============================================================* 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 ){                 //如果链表为空,则返回falsereturn 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值违法,删除失败
}