力扣 19删除链表的倒数第 N 个结点

Posted 霜序0.2℃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣 19删除链表的倒数第 N 个结点相关的知识,希望对你有一定的参考价值。

题目

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

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

解释与代码

方法有三种:

  • 最普通的长度计算(遍历一遍,然后第二次扫描到的时候处理)
  • 用栈进行辅助(入栈,弹出时计数)
  • 双指针(first比second超前n)

以栈的写法为代码示例

class Solution 
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) 
        stack<ListNode*> sl;
        ListNode* sw = head;
        while (head) 
            sl.push(head);
            head = head->next;
        
        int cnt = 0;
        while (1) 
            cnt++;
            if (cnt == n) 
                if (sl.size() == 1) // l
                    return sl.top()->next;
                 else 
                    sl.pop();
                    sl.top()->next = sl.top()->next->next;
                    return sw;
                
            
            sl.pop();
        
        return head;
    
;

以上是关于力扣 19删除链表的倒数第 N 个结点的主要内容,如果未能解决你的问题,请参考以下文章

力扣19. 删除链表的倒数第 N 个结点

力扣JS 19. 删除链表的倒数第 N 个结点 面试题 02.07. 链表相交

精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点c++/java详细题解

19链表-删除链表的倒数第N个结点

19链表-删除链表的倒数第N个结点

删除链表的倒数第 N 个结点