今晚的月色温柔

导航

删除单链表中某区间的数

【问题描述】已知某带头结点的单链表中存放着若干整数,请删除该单链表中元素在[x, y]之间的所有结点,要求算法的时间复杂度为O(n),空间复杂度为O(1)。

【输入形式】第一行:单链表中元素个数m

第二行:单链表中的m个整数

第三行:要删除的元素值所在区间[x,y]对应的x和y

【输出形式】

删除元素后的单链表中剩下的元素值

【样例输入】

5

13 24 50 33 56

30 50

【样例输出】

13 24 56

 

 

 

 

参照删除值为x的节点修改



#include <iostream>
using namespace std;
struct node {
int data;
node *next;
};
typedef node *LinkList;
void createList(LinkList &L,int m)
{L=new node;
L->next=NULL;
node *p,*t;
t=L;
for(int i=0;i<m;i++){
p=new node;
cin>>p->data;
t->next=p;
t=p;
}
t->next=NULL;
}
void printList(LinkList L){
node *p;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
}
void delElem(LinkList &L,int x,int y){
node *p,*q;
p=L,q=L;
while(p){
if((p->data>=x)&&(p->data<=y)){
q->next=p->next;
p=q->next;
}
else{
q=p;
p=p->next;
}
}
}
int main() {
LinkList L;
int m;
int x,y;
cin>>m;//单链表元素个数
createList(L,m);//尾插入法创建带头结点的单链表
cin>>x>>y;//区间[x,y]
delElem(L,x,y);
printList(L);

return 0;
}

posted on 2020-04-20 16:22  1022  阅读(321)  评论(0编辑  收藏  举报