程序员代码面试指南2.2:在链表中删除倒数第K个节点

在链表中删除倒数第K个节点

https://www.nowcoder.com/practice/e5d90aac4c8b4628aa70d9b6597c0560

1、思路

书中描述的方法稍显复杂,这里用一种更简单的思路:

  • 快慢指针指向头结点,快指针先往前移动K步;

  • 若快指针遍历完链表后,K大于0,表示K的值已经超过了链表本身的长度,即不存在倒数第K个节点;

  • 快慢指针同时往前走,快指针走到链表尾部时,慢指针所指的就是倒数第K个节点。因为慢指针比快指针少走了K步,故快指针走完链表时,慢指针刚好走到链表的倒数第K个节点。

2、代码

list_node * remove_last_kth_node(list_node * head, int K)
{
    auto fast = head, slow = head;

    while (K --  && fast->next != nullptr) fast = fast->next;
    if (K > 0) return nullptr;      //判断倒数第K个节点是否存在

    while (fast->next != nullptr)
    {
        fast = fast->next;
        slow = slow->next;
    }

    slow->next = slow->next->next;  //跳过倒数第K个节点

    return head;
}

主要是为左程云的《程序员代码面试指南》这本书改写C++版的题解。

全部评论

相关推荐

03-21 08:46
已编辑
门头沟学院 C++
只写bug的程序媛:本科能找到好的,真不建议读研,提前占坑比较好,本科找不到好的,也不建议读研,因为两三年之后压力只会更大,唯一的解就是行业好起来
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务