题意:
方法:
模拟
思路:首先,统计链表长度 num;
然后,num - n 得到从前往后遍历删除的节点编号;
最后,遍历删除。
注意:删除某节点要先得到某节点的前一个节点。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(head==nullptr)
return nullptr;
int num=0;
for(ListNode* p=head;p;p=p->next){//统计链表长度
num++;
}
int t=num-n;//删除正向第t个节点,t从0开始
ListNode *p=head,*q=head->next;
if(t==0){//如果是第一个节点
head=head->next;
}else{
t--;
while(t--){//删除某节点要先得到某节点的前一个节点
p=p->next;
q=q->next;
}
p->next=q->next;
}
return head;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号