题意:
方法:
模拟
思路:首先,统计链表长度 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; } };
时间复杂度:空间复杂度: