6-1 迴圈單鏈表區間刪除(15 分)PTA
阿新 • • 發佈:2018-12-31
//庫函式標頭檔案包含 #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; } /* 請在這裡填寫答案 */ Status ListCreate_CL(LinkList &CL) { CL = (LinkList)malloc(sizeof (LinkList) ); CL->next = CL; LinkList p = CL; LinkList t; int n; scanf("%d", &n); if(n < 0) return 0; for(int i = 1; i <= n; ++i) { int x; scanf("%d", &x); t = (LinkList)malloc(sizeof(LinkList)); t->data = x; t->next = CL; p->next = t; p = t; } return 1; } void ListDelete_CL(LinkList &CL, ElemType min, ElemType max) { LNode *p=CL; //p指向第一個元素結點 if(p->next == CL) { return; } if(min == max) return; while(p->next != CL) { LNode *t = p->next; if(t == CL) break; while(t->data > min && t->data < max) { t = t->next; } p->next = t; p = t; } }