迴圈單鏈表區間刪除
阿新 • • 發佈:2018-12-12
本題要求實現帶頭結點的迴圈單鏈表的建立和單鏈表的區間刪除。L是一個帶頭結點的迴圈單鏈表,函式ListCreate_CL用於建立一個迴圈單鏈表,函式ListDelete_CL用於刪除取值大於min小於max的連結串列元素。 函式介面定義:
Status ListCreate_CL(LinkList &CL);
void ListDelete_CL(LinkList &CL,ElemType min,ElemType max);
裁判測試程式樣例:
//庫函式標頭檔案包含 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //函式狀態碼定義 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; //假設線性表中的元素均為整型 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; //迴圈單鏈表型別定義與單鏈表定義相同,區別在尾節點next取值 Status ListCreate_CL(LinkList &CL); void ListDelete_CL(LinkList &CL, ElemType min, ElemType max); void ListPrint_CL(LinkList &CL) { //輸出單鏈表,空表時輸出Empty List。 LNode *p=CL->next; //p指向第一個元素結點 if(p==CL){ printf("Empty List"); return; } while(p!=CL) { if(p->next!=CL) printf("%d ",p->data); else printf("%d",p->data); p=p->next; } } int main() { LinkList CL; ElemType min,max; if(ListCreate_CL(CL)!= OK) { printf("迴圈連結串列建立失敗!!!\n"); return -1; } scanf("%d%d",&min,&max); ListDelete_CL(CL,min,max); ListPrint_CL(CL); return 0; } /* 請在這裡填寫答案 */
輸入格式: 第一行輸入一個整數n,表示迴圈單鏈表中元素個數,接下來一行共n個整數,中間用空格隔開。第三行輸入min和max。
輸出格式: 輸出刪除後迴圈連結串列的各個元素,兩個元素之間用空格隔開,最後一個元素後面沒有空格。
輸入樣例:
6
1 2 3 4 5 6
2 5
輸出樣例:
1 2 5 6
Status ListCreate_CL(LinkList &CL)
{
int n;
scanf("%d",&n);
if(n<0)return ERROR;
LNode *h,*t,*s;
h = (LNode *)malloc( sizeof(LNode));
t=h;
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
t->next=s;
t=s;
}
t->next=h;
CL=h;
return OK;
}
void ListDelete_CL(LinkList &CL,ElemType min, ElemType max)
{
LNode *q,*p;
p=CL;
while(p->next!=CL)
{
if(p->next->data>min&&p->next->data<max)
{
q=p->next;
p->next=q->next;
}
else p=p->next;
}
}