list
#include<cstdio> #include<cstdlib> using namespace std; typedef struct ListNode{ int data; ListNode* pre; ListNode* nxt; }List; int length; List* CreateList(int len) { List* ret=(List*)malloc(sizeof(List)); List* tail=ret; ret->pre=ret,ret->nxt=ret,ret->data=1; for(int i=2;i<=len;i++) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=i, tail->nxt=newnode,newnode->pre=tail,newnode->nxt=ret,tail=newnode; } ret->pre=tail; length=len; return ret; } void Delete(List* pos) { pos->pre->nxt=pos->pre; pos->nxt->pre=pos->nxt; free(pos); length--; } List* JumpToItem(List* list,int n) { if(n==0) return list; while(n--) list=list->nxt; return list; } void Print(List* list) { printf("%d ",list->data); for(int i=2;i<=length;i++) { list=list->nxt; printf("%d ",list->data); } printf("\n"); } void InsertAft(List* pos,int data) { List* newnode=(List*)malloc(sizeof(newnode)); newnode->data=data, newnode->pre=pos,newnode->nxt=pos->nxt,pos->nxt=newnode; length++; } void InsertBef(List* pos,int data) { pos=pos->pre; InsertAft(pos,data); } int main() { List* list=CreateList(15); Print(list); Delete(list); Print(JumpToItem(list,1)); InsertAft(list,233); Print(JumpToItem(list,1)); InsertBef(JumpToItem(list,2),2333); Print(JumpToItem(list,1)); return 0; }
#include<cstdio> #include<cstdlib> using namespace std; typedef struct ListNode{ ListNode* pre; ListNode* nxt; int data; }List; int length; List* head; List* tail; inline List* CreateList(int len) { length=len; List* ret=(List*)malloc(sizeof(List)); ret->data=1; head=ret,tail=ret; for(int i=2;i<=len;i++) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=i,newnode->nxt=head,tail->nxt=newnode,newnode->pre=tail,tail=newnode; } ret->pre=tail; return ret; } inline void Print() { int len=length; List* node=head; while(len--) { printf("node: %d, pre: %d, nxt: %d, data: %d\n",node,node->pre,node->nxt,node->data); node=node->nxt; } } inline List* JumpToItem(int pos) { List* ret=head; while(pos--)ret=ret->nxt; return ret; } inline void Delete(List* elem) { elem->pre->nxt=elem->nxt; elem->nxt->pre=elem->pre; if(elem==head)head=elem->nxt; if(elem==tail)tail=elem->pre; length--; free(elem); } inline void InsertAft(List* pos,int data) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=data; newnode->pre=pos,newnode->nxt=pos->nxt; pos->nxt=newnode,pos->nxt->pre=newnode; if(pos==tail)tail=newnode; length++; } inline void InsertBef(List* pos,int data) { List* newnode=(List*)malloc(sizeof(List)); InsertAft(pos->pre,data); if(newnode==head)head=newnode; } int main() { List* list=CreateList(20); Print(); InsertBef(list,2333); Print(); }
#include<cstdio> #include<cstdlib> #include<windows.h> using namespace std; struct Linker { typedef struct ListNode { ListNode* pre; ListNode* nxt; int data; } List; int length; List* head; List* tail; inline void CreateList(int len) { length=len; List* ret=(List*)malloc(sizeof(List)); ret->data=1; head=ret,tail=ret; for(int i=2; i<=len; i++) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=i,newnode->nxt=head,tail->nxt=newnode,newnode->pre=tail,tail=newnode; } ret->pre=tail; } inline void Print() { int len=length; List* node=head; while(len--) { printf("node: %d, pre: %d, nxt: %d, data: %d\n",node,node->pre,node->nxt,node->data); node=node->nxt; } } inline List* JumpToItem(int pos) { List* ret=head; while(pos--)ret=ret->nxt; return ret; } inline void Delete(List* elem) { elem->pre->nxt=elem->nxt; elem->nxt->pre=elem->pre; if(elem==head)head=elem->nxt; if(elem==tail)tail=elem->pre; length--; free(elem); } inline void InsertAft(List* pos,int data) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=data; newnode->pre=pos,newnode->nxt=pos->nxt; pos->nxt=newnode,pos->nxt->pre=newnode; if(pos==tail)tail=newnode; length++; } inline void InsertBef(List* pos,int data) { List* newnode=(List*)malloc(sizeof(List)); newnode->data=data; newnode->pre=pos->pre,newnode->nxt=pos; pos->pre=newnode,newnode->pre->nxt=newnode; if(pos==head)head=newnode; length++; } }; Linker List; int main() { List.CreateList(1000000);//25M. return 0; }