给定一个链表,实现删除链表第 K 个节点的函数。
结题思路:
1、先找到第k个结点的位置(从头结点开始走k-1步)
2、删除(一定要先链接再删除,不然就找不到删除节点后面的结点啦,会造成链表不完整)
代码实现:

list_node * remove_kth_node(list_node * head, int K)
{
    //////在下面完成代码
    if(head==NULL)//链表为空,直接返回
        return NULL;
    list_node * fast=head;
    if(K==1)//删掉的是第一个结点,相当于头删
    {
        head=head->next;
        return head;
    }
    while(--K)//fast从结点开始走--k步,最后fast所在位置就是第k个结点
    //如果走k--步,最后fast所在位置就是第k+1个结点,就会出错
    {
        if(fast==NULL||fast->next==NULL)//解决k的值大于链表长度的情况
            return NULL;
        fast=fast->next;
    }

    if(fast->next)//找到第k个结点,构思尾删
    {
        fast->val=fast->next->val;//把第k个结点和第k+1个结点的值交换
        list_node * del=fast->next;//标记fast->next
        fast->next=fast->next->next;//链接
        free(del);//删除--一种比较巧妙的删除方式
        //单链表删除pos位置的特殊处理
    }
    else//删除位置是链表的尾结点,相当于尾删
    {
        free(fast);
    }
    return head;
}

图片说明