📅  最后修改于: 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)。
在单次遍历中找到链表的倒数第二个节点需要使用双指针技巧,通过遍历整个链表,找到倒数第二个节点。该算法复杂度较低,可以高效地解决该问题。