单向循环链表删除指定位置(第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 ){                 //如果链表为空,则返回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值违法,删除失败
}
posted @ 2026-07-23 23:18    阅读(0)  评论(0)    收藏  举报