Leetcode19删除链表的倒数第N个结点
尝试只用一趟扫描实现
注意点:不能用malloc 要用new ListNode
为什么要建立头结点 是因为当单链表只有一个结点的时候
例如单链表只有1 n=1 代表单链表清空 所以要设置头结点
倒数第n个结点 可以利用一个指针先行后移动n位 再一起移动
有个问题是如果是1 2 3 4 5 n=6 的情况下应该返回的是1 2 3 4 5,也就是说并不删除结点,因为没有倒数第6个结点
而题解测试时会返回2 3 4 5.
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *a = new ListNode(0);
a->next = head;
ListNode *r = a;
ListNode *p = a;
ListNode *q = a;
while(n--)
{
p = q->next;
q = q->next;
}
if(p == nullptr)
{
return head;
}
else
{
while(p->next)
{
p = p->next;
r = r->next;
}
}
r->next = r->next->next;
return a->next;
}
保持好奇心!

浙公网安备 33010602011771号