Description:
题目大意:删除单项链表的倒数第n个节点
解题思路:
算法标签:双指针
- 设置虚拟头节点
- 设置双指针 pre 和 last,使其两个指针相隔 n 个元素
- 双指针同时右移,直到 last 为 NULL
- 删除 pre 的下一个元素
- 返回 head
代码:
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummyhead = new ListNode(0);
        dummyhead -> next = head;
        
        ListNode* pre = dummyhead;
        ListNode* last = dummyhead;
        
        for(int i = 0;i < n+1;i++) 
            last = last -> next;
        while(last != NULL) {
            pre = pre -> next;
            last = last  -> next;
        }
        
        ListNode* delNode = pre -> next;
        pre -> next = delNode -> next;
        delete delNode;
        return dummyhead -> next;
    }
};










