给定一个链表,实现删除链表第 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;
}

京公网安备 11010502036488号