本文主要是介绍已知线性表中的元素以值递增有序排列,并以单链表做存储结构。试写一高效的算法, 删除表中所有值大于 mink 且小于 maxk 的元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
时间复杂度为:O(n)
#include<iostream>
#include<stdio.h>
using namespace std;
typedef int Element;typedef struct Node{Element data;struct Node *next;
}LinkList;//初始化链表,带头节点,头插法
LinkList* init_headInsert(){LinkList *list,*head;list = (LinkList*)malloc(sizeof(LinkList));//list从头到尾都是指向的首地址list->next = NULL;for(int i=0;i<10;i++){ LinkList* s = (LinkList*)malloc(sizeof(LinkList));s->data = i;s->next = list->next;list->next = s; }while(list->next){cout<<list->next->data<<" ";list = list->next;}return list;
}//初始化链表,带头节点,尾插法
LinkList* init_rearInsert(){LinkList* rear;LinkList* list;list = (LinkList*)malloc(sizeof(LinkList));list->next = NULL;rear = list;for(int i=0;i<10;i++){LinkList *s = (LinkList*)malloc(sizeof(LinkList));s->data = i;rear->next = s;rear = s;}rear->next = NULL;//不赋值尾NULL,将会不断输出return list;
}
bool ListDelete(LinkList* L,Element mink,Element maxk){if(mink>maxk) return -1;LinkList* pre;LinkList* head = L;//L为头节点pre = L;L = L->next;while(L->data<mink){L = L->next;pre = pre->next;}//删除节点while(L->data<=maxk){LinkList* q = L;pre->next = L->next;L = L->next;free(q);}while(head->next){cout<<head->next->data<<" ";head = head->next;}return 1;
}int main(){Element mink = 1;Element maxk = 7;LinkList* list = init_rearInsert();ListDelete(list,mink,maxk);
}
这篇关于已知线性表中的元素以值递增有序排列,并以单链表做存储结构。试写一高效的算法, 删除表中所有值大于 mink 且小于 maxk 的元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!