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

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

    示例:

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

    说明:

    给定的 n 保证是有效的。

    进阶:

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

    Code: 递归法

    class Solution {
    public:
        int cur=0;
        ListNode* removeNthFromEnd(ListNode* head, int n) {
           if(!head) return NULL;
           head->next = removeNthFromEnd(head->next,n);
           cur++;
           if(n==cur) return head->next;
           return head;
        }
    };
    

    Code: 双指针法

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            // 快慢双指针法
            ListNode *p = head, *q = head;
            while(n>0){q=q->next;n--;}  // 让快指针q先跑n个
            if(q==NULL){return head->next;}  // q跑到头NULL说明删除的是头结点,用头结点的下一个作为返回值即可
            while(q->next!=NULL){p = p->next; q = q->next;}  // 快慢指针一起跑,当快指针到尾结点时停止
            p->next = p->next->next;  //此时p指针为要删除的结点的前一个结点
            return head;
        }
    };
    
  • 相关阅读:
    2019年CSP-J初赛试题(普及组)试题详解
    开放课件
    猴子选大王 (约瑟夫问题)
    后缀表达式转中缀表达式
    JDBC的使用
    JDBC
    MySQL第五天
    MySQL第四天
    MySQL第三天
    MySQL第二天
  • 原文地址:https://www.cnblogs.com/RioTian/p/12524406.html
Copyright © 2011-2022 走看看