题目:删除一个链表的倒数第N个结点,经典问题(题目已经确定给定的N有效,否则的话需要考虑N是否会越界)
分析:如果要删除倒数第N个结点,得找到倒数第N+1个结点(如果倒数第N个结点不是首结点的话)。设置2个指针,指针1先走N步,指针2再开始走。考虑各种可能情况。
class Solution
{
public:
ListNode *removeNthFromEnd(ListNode *head, int n)
{
if(head==NULL || n==0)
return NULL;//特殊情况
ListNode *pfirst=head;
for(int i=0;i<n;++i)
pfirst=pfirst->next;
if(pfirst==NULL)
return head->next;//要删除的是首结点。
ListNode *psecond=head;
while(pfirst->next!=NULL)
{
pfirst=pfirst->next;
psecond=psecond->next;
}//不是首结点的话就找到倒数第N+1个结点
ListNode *pdelete=psecond->next;
psecond->next=psecond->next->next;
delete pdelete;
return head;
}
};