在带头结点的循环链表L中,结点的数据元素为整型,且按值递增有序存放。给定两个整数a和b,且a<b,编写算法删除链表L中元素值大于a且小于b的所有结点。
void DelElems(LinkList head,int a,int b)
{
LinkList* p=head;
LinkList *del;
while(p->next!=NULL);
if(p->next>a||p->next<b)
del=p->next;
p->next=del->next;
free(del);
p=p->next;
}
void delete(List* head,int a, int b){
List *p,*q;
q=head;
p=head->next;
while(p!=head){
if(p->data>a&&p->data<b){
q->next=p->next;free(p);p=q->next;}
else {p=p->next;q=q->next;}
void delete(List* head, int a, int b) {
List *p, *q;
q = head;
p = head->next;
while (p != head) {
if(p->data > a && p->data < b) {
q->next = p->next;
free(p);
p = q->next;
else {
p = p->next;
q = q->next;
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct List
int data;
struct List *next;
}List;
List* creat(int n)
List* head = (List*)malloc(sizeof(List));
head->next=head;
List *p;
p=head;
for(int i=0;i<n;i++)
List* q = (List*)malloc(sizeof(List));
scanf("%d",&q->data);
q->next=head;
p->next=q;
p=q;
return head;
void print(List* head)
while (p!=head)
printf("%d ",p->data);
void delete(List* head,int x,int y)
if(p->data>x&&p->data<y)
q->next=p->next;
p=q->next;
else
q=q->next;
int main ( )
int n,x,y;
printf("请输入单链表的长度:\n");
scanf("%d",&n);
printf("请输入表中各元素:\n");
List* L=creat(n);
printf("请输入x,y:\n");
scanf("%d %d",&x,&y);
printf("结果:\n");
delete(L,x,y);
print(L);
return 0;
void Delete_list(Lnode *head, ElemType a, ElemType b) {
Lnode *p, *q;
if(!head->next) return ERROR;
p=head->next; q=p; while(p->next!=head)
{if(p->data>x) && (p->data
if(p==head)
{head=p->next; free(p); p=head; q=p; } else
{q->next=p->next; free(p); p=q->next; }
{q=p; p=p->next; }
asdasdasdasda
void delete(Lis...
用户登录可进行刷题及查看答案
void delete(List* head, int a, int b) { List *p, *q; q = head; p = head->next; while (p != head) { if(p->data > a && p->data < b) { q->next = p->next; free(p); p = q->next; } else { p = p->next; q = q->next; } } }
登录后提交答案