zoukankan      html  css  js  c++  java
  • LeetCode 19. Remove Nth Node From End of List(删除链表中倒数第N个节点)

    题意:删除链表中倒数第N个节点。

    法一:递归。每次统计当前链表长度,如果等于N,则return head -> next,即删除倒数第N个节点;否则的话,问题转化为子问题“对head->next这个链表删除倒数第N个节点”,将head的next指针指向该子问题的结果,返回head即可。这个方法时间复杂度高,不推荐。

    /**
     * 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) {
            if(head == NULL) return NULL;
            int cnt = 0;
            ListNode *tmp = head;
            while(tmp){
                ++cnt;
                tmp = tmp -> next;
            }
            if(cnt == n){
                return head -> next;
            }
            head -> next = removeNthFromEnd(head -> next, n);
            return head;
        }
    };
    

    法二:快慢指针,快指针先比慢指针多走N步,然后两者同时走,这样的话,当快指针的next指向NULL时,说明慢指针的next指向要被删除的节点。

    注意:fast先走n步后,如果为NULL,表示链表长为n,则直接删除头结点,返回head->next即可。

    /**
     * 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* fast = head;
            ListNode* slow = head;
            while(n--){
                fast = fast -> next;
            }
            if(fast == NULL) return head -> next;
            while(fast -> next){
                fast = fast -> next;
                slow = slow -> next;
            }
            slow -> next = slow -> next -> next;
            return head;
        }
    };
    

     

  • 相关阅读:
    手势模型和Angular Material的实现
    拟物设计和Angular的实现
    深入探索AngularJS
    自己动手做Web框架—MVC+Front Controller
    学习《CSS选择器Level-4》不完全版
    【基础】固定列宽的表格及示例演示
    使用min-content实现容器宽度自适应于内部元素
    【基础】CSS实现多重边框的5种方式
    【图片版】学习CSS网格布局
    【基础】EM 还是 REM?这是一个问题!
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12347201.html
Copyright © 2011-2022 走看看