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