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;
}
};