题目所给链表是不带头结点的链表。
思路简单,用左右指针,保持一定的距离,右指针走到null了,左指针的位置就是倒数第n个位置。
ListNode *removeNthFromEnd(ListNode *head, int n) {
if (head == nullptr) return head;
ListNode *p = head, *q = head, *tmp;
while (n > 0) {
p = p->next;
n--;
}
if(p == nullptr) {
return head->next;
}
while (p->next != nullptr) {
p = p->next;
q = q->next;
}
tmp = q->next;
q->next = tmp->next;
return head;
}
红色部分注意:如果是第一个结点,也就是倒数第size个结点的时候,没有头结点,第一个结点的前面是没有结点的,所以不能用l.next = l.next.next,所以这个当作特殊情况。直接返回第二个结点就行了。