更多LeetCode题解
My Solution
将倒数转为正数:先计数,再删除第count-n+1
个
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* p = head;
int count = 0;
while (p) {
count++;
p = p->next;
}
if (count == n) { return head->next; }
ListNode* q = head;
for (int i = 0; i < count - n - 1 ; i++) {
q = q->next;
}
ListNode* l = q->next;
q->next = l->next;
return head;
}
};
simplified
由于可能删除的是第一个元素,导致无法用一个指针指向头结点的前一个结点,所以可以加一个空的头,避免分类讨论。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode dummyHead(0);
dummyHead.next = head;
ListNode* p = &dummyHead;
int count = 0;
while (p) {
count++;
p = p->next;
}
ListNode* q = &dummyHead;
for (int i = 0; i < count - n - 1; i++) {
q = q->next;
}
ListNode* l = q->next;
q->next = l->next;
return dummyHead.next;
}
};