C++面试总结之算法(三):链表

本文总结了C++面试中关于链表的常见问题,包括判断链表有环的方法、找环的入口节点、合并两个有序链表、双向链表排序及确定链表中间节点的策略。通过实例解析了各种操作的实现细节,对于面试和链表理解极具参考价值。
摘要由CSDN通过智能技术生成

1. 怎样判断一个链表有环

(1)最常用方法

定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向 NULL)都没有追上第一个指针,那么链表就不是环形链表。

bool IsLoop(NODE *head) {// 假设为带头节点的单链表

    if (head == NULL)
        return false;

    node *slow = head->next; // 初始时,慢指针从头节点开始走1步
    if (slow == NULL)
        return false;

    node *fast = slow->next; // 初始时,快指针从头节点开始走2步
    while (fast!=NULL && slow!=NULL){ //当单链表没有环时,循环到链表尾结束
        if (fast == slow)
            return true;
        slow = slow->next; // 慢指针每次走一步
        fast = fast->next;
        if (fast != NULL)
            fast = fast->next;
    }
    return false;
}

(2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值