#if 1
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
//初始化
Node *init()
{
Node *head=new Node;
head->next=NULL;
return head;
}
//头插法创建节点
void insetList(Node *head,int i)
{
Node *cur=new Node;
cur->data=i;
cur->next=head->next;
head->next=cur;
}
//链表A生成
void CreateList(Node *head_A)
{
for(int i=20;i>0;i--)
{
insetList(head_A,--i);
}
}
//打印链表
void print(Node *head)
{
Node *temp=head->next; //防止头指针移动
while(temp)
{
cout<<temp->data<<" ";
temp=temp->next;
}
}
void DeleteElement(Node *head_A)
{
Node *pa=head_A->next; //pa指向链表A的首元节点
int mink=5;int maxk=15;
Node *pc=head_A; //pc为pa前驱
while(pa)
{
if(pa->data>mink&&pa->data<maxk)
{
pc->next=pa->next; //pc指向pa的后继节点
delete pa;
}
else
{
pc->next=pa; //pc指向小于mink的节点
pc=pc->next; //pc指针移动
}
pa=pc->next; //pa
}
}
void main()
{
Node *head_A=init(); //链表A初始化头节点
//创建链表A
CreateList(head_A);
//打印链表A
cout<<"链表A为:"<<endl;
print(head_A);
cout<<endl;
//调用函数排除元素
DeleteElement(head_A);
//打印链表C
cout<<endl<<"删除后链表为:"<<endl;
print(head_A);
cout<<endl;
system("pause");
}
#endif
/*
总结:
删除顺序链表区间元素,需要一个前驱节点,其中两个临时的移动结构体指针
*/