题目: 题解:
思路: 第一次遍历计算链表长度 第二次遍历使用三个指针: pre:指向p前一个 p:工作指针,直到p指向count==size-n+1位置(即要删除的结点) pnext:p的下一个 删除p即可
**注意:**力扣里的链表的head都存数据的,易错!
代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int size=0;
ListNode* p=head;
while(p!=nullptr)
{
size++;
p=p->next;
}
if(size==n)
{
ListNode* result=head->next;
delete head;
return result;
}
ListNode* pre=head;
p=head;
int count=1;
while(size-n+1!=count)
{
pre=p;
p=p->next;
count++;
}
ListNode* pnext=p->next;
pre->next=pnext;
delete p;
if(size==1)
{
return nullptr;
}
return head;
}
};
|