leetcode19删除链表的倒数第N个节点

33 阅读1分钟

有多种解法,首次采用栈的思路

class Solution {

public:

    ListNode* removeNthFromEnd(ListNode* head, int n) {

        ListNode* dummy = new ListNode(0, head);

        stack<ListNode*> stk;
        // 创造一个虚拟头节点,这样一来,对原头节点的删除操作和其他节点一致

        ListNode* curr = dummy;

        while(curr) {

            stk.push(curr);

            curr = curr ->next;

        }
        // tmp是记录待删除的节点
        ListNode* tmp = nullptr;

        for(int i = 0; i < n; i++) {

            tmp = stk.top();

            stk.pop();

        }
      
        stk.top()->next = tmp->next;

        delete tmp;

        return dummy->next;

    }

};