//倒序删除第n个结点
//链表的题目基本上都是优先考虑双指针。一个指针先走N步,
//然后两个指针同步移动到链表末尾,移除前一个指针所指着的节点即可
#include<iostream>
using namespace std;
struct NODE
{
int data;
NODE *next;
};
NODE *Remove(NODE *L,int n) //*Remove的*不要忘记
{
NODE *head=L;
NODE *right=head;
NODE *left=head;
int i;
for(i=0;i<n;i++)
{
right=right->next;
}
if(right==NULL)
{
L=L->next;
return head;
}
while(right->next!=NULL)
{
left=left->next;
right=right->next;
}
left->next=left->next->next;
return head;
}
int main()
{
NODE s1,s2,s3,s4;
s1.data=1;
s1.next=&s2;
s2.data=3;
s2.next=&s3;
s3.data=5;
s3.next=&s4;
s4.data=7;
s4.next=NULL;
int n=3;
NODE *s=Remove(&s1,n);
while(s!=NULL)
{
cout<<s->data<<endl;
s=s->next;
}
}