• 【简单算法】22.删除链表的倒数第N个节点


    题目:

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
    
    示例:
    
    给定一个链表: 1->2->3->4->5, 和 n = 2.
    
    当删除了倒数第二个节点后,链表变为 1->2->3->5.
    说明:
    
    给定的 n 保证是有效的。
    
    进阶:
    
    你能尝试使用一趟扫描实现吗?

    1。解题思路:

    快慢指针实现即可。快指针指向第N个节点。慢指针指向第一个节点,然后两个指针依次指向下一个节点,直到慢指针到达链表的末尾。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode * slow = head;
            ListNode * fast = head;
            ListNode * target = head;
            
            if(n <= 0){
                return head;
            }
            
            for(int i = 0;i < n;++i){
                fast = fast->next;
            }
            
            if(fast == NULL){
                target = head->next;
                free(head);
                return target;    
            }
            
            while(fast->next){
                fast = fast->next;
                slow = slow->next;
            }
            
            target = slow->next;
            slow->next = slow->next->next;
            
            free(target);
            
            return  head;
        }
    };
  • 相关阅读:
    02 小白新一天
    集合排序
    匿名内部类-Lambda表达式
    设计模式之适配器设计
    设计模式之代理设计
    设计模式之工厂设计
    依赖倒转原则
    多态及练习题
    在一个类中调用另外一个类
    对象的三大特性之封装
  • 原文地址:https://www.cnblogs.com/mikemeng/p/8984940.html
Copyright © 2020-2023  润新知