LeetCode19. Remove Nth Node From End of List

LeetCode19. Remove Nth Node From End of List
这题不难,这里记录的是让它更容易写出代码的一些技巧。

基本思想就是用两个指针,一快一慢,中间保持n的距离。当快的到达末尾时,慢的那个就是要删除的那个。

这里会有两个问题:
1.如果最后慢指针指的就是要删除的那个节点的话,那么我们得要记住它前面的节点。
2.如果删除的是头节点那么怎么处理?略显麻烦。

解决方法如下:
1.我们让最后慢指针指向要删除节点的前面一个节点,这样就不用记住它了,降低编码难度。
2.我们另外创造出一个新的头节点,让它指向原来的头节点,这样如果删除的是原来的头节点,那么就没有那么难了。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        auto start = new ListNode(0);
        start->next = head;
        auto fast = start, slow = start;
        for (int i = 0; i < n; ++i)
            fast = fast->next;
        while (fast->next) {
            slow = slow->next;
            fast = fast->next;
        }
        slow->next = slow->next->next;
        return start->next;
    }
};