链接
点击就送
首先是没有算法无脑版
时间:o(2*size-n)
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
int i = 0;
ListNode* lala = new ListNode(1);
lala->next = head;
head = lala;
while(lala)
{
i++;
lala=lala->next;
}
int x=i-n-1;
lala = head;
for(int j=0;j<x;j++)
{
lala=lala->next;
}
if(lala->next!=NULL)
{
lala->next = lala->next->next;
}
return head->next;
}
再后面有一个更简单的方法可以来计算就是用两个指针一个是fast遍历整个数组,还有一个last在他的后面n+1,位,也就是说只要fast吧整个链表遍历完了,直接在last指针里面产出下一个就完事了
时间:
o(size-n)
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
ListNode* last = new ListNode(0);
last->next = head;
ListNode* fast;
fast = head;
head = last;
int i=0;
if(!head)//特殊判断
return NULL;
if(!head->next)//特殊判断
return NULL;
while(fast)
{
i++;
if(i>n)
{
fast = fast->next;
last = last->next;
}
else
{
fast = fast->next;
}
}
if(last->next!=NULL)
{
last->next = last->next->next;
}
return head->next;
}
这个题目最恶心的就是细节了,特别难受哇,卡了好久的细节