📌  相关文章
📜  在单次遍历中找到链表的倒数第二个节点(1)

📅  最后修改于: 2023-12-03 14:51:24.678000             🧑  作者: Mango

在单次遍历中找到链表的倒数第二个节点

在链表中找到倒数第二个节点是链表问题中的经典问题。在单次遍历中找到链表的倒数第二个节点需要使用双指针技巧,遍历整个链表,找到倒数第二个节点。

解决方案

使用两个指针节点,一个指针节点指向头节点,另一个指针节点指向头节点的下一个节点。

ListNode* findSecondLastNode(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return nullptr;
    }
    ListNode* prev = head;
    ListNode* curr = head->next;
    while (curr->next != nullptr) {
        prev = curr;
        curr = curr->next;
    }
    return prev;
}

在上面的代码中,我们首先判断链表是否为空或链表中只有一个元素,若是则直接返回null。接下来,我们利用两个指针 prev 和 curr 遍历整个链表,当 curr 指向最后一个节点时,prev 指向的即为倒数第二个节点。

复杂度分析

时间复杂度为 O(n),空间复杂度为 O(1)。

总结

在单次遍历中找到链表的倒数第二个节点需要使用双指针技巧,通过遍历整个链表,找到倒数第二个节点。该算法复杂度较低,可以高效地解决该问题。