zoukankan      html  css  js  c++  java
  • LeetCode | 19. 删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

    示例:

    给定一个链表: 1->2->3->4->5, 和 n = 2.
    
    当删除了倒数第二个节点后,链表变为 1->2->3->5.
    

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

    解法:

    老实用快慢指针,快指针先走n步,然后快慢一起走,直到快指针走到最后,要注意的是可能是要删除第一个节点,这个时候可以直接返回head -> next

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            if(!head | !head -> next) return NULL;
            ListNode * fast = head, *slow = head;
            for(int i = 0; i < n; i++){
                fast = fast -> next;
            }
            if(!fast){
                return head -> next;    
            }
            
            while(fast -> next){
                fast = fast -> next;
                slow = slow -> next;
            }
            slow -> next = slow -> next -> next;
            return head;
        }
    };
    
  • 相关阅读:
    单步调试及回滚测试
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    程序员的自我修养阅读笔记02
    第七周总结
    程序员的自我修养阅读笔记01
    第六周总结
    结对地铁开发
    第五周总结
  • 原文地址:https://www.cnblogs.com/RioTian/p/12536485.html
Copyright © 2011-2022 走看看