#include<iostream.h> typedef struct node { int val; struct node* pNext; }NODE,*PNODE; //NODE == struct node //PNODE == struct node* class MyList { private: PNODE pHead;//struct node* pHead public: MyList() { this->pHead = NULL; } ~MyList() { while(this->pHead!=NULL) { PNODE pTemp = pHead->pNext; delete pHead; pHead = pTemp; } } void Init() { int a; char ans; PNODE pTail,pNew; do { cout<<"请输入一个节点值:"; cin>>a; if(pHead == NULL) { pHead = new NODE; pHead->val = a; pHead->pNext = NULL; pTail = pHead; } else { pTail = pHead; while(pTail->pNext!=NULL) { pTail = pTail->pNext; } pNew = new NODE; pNew->val = a; pNew->pNext = NULL; pTail->pNext = pNew; pTail = pTail->pNext; } cout<<"继续吗?(Y/N): "; cin>>ans; }while(ans=='Y'||ans=='y'); } void Add(int val) { if(pHead == NULL) { pHead = new NODE; pHead->val = val; pHead->pNext = NULL; } else {p PNODE pTemp = pHead; while(pTemp->pNext!=NULL) { pTemp = pTemp->pNext; } PNODE pNew = new NODE; pNew->val = val; pNew->pNext = NULL; pTemp->pNext = pNew; } } int DelAt(int k) { PNODE p1,p2,pTemp; if(pHead == NULL) { return -1; } if(k<0 || k>this->GetNodeCnt()-1) { return -1; } if(this->GetNodeCnt() == 1) { delete pHead; pHead = NULL; return 0; } if(k==0) { pTemp = pHead; pHead = pTemp->pNext; delete pTemp; return 0; } if(k == this->GetNodeCnt()-1) { PNODE p,pTemp; p = pHead; while(p->pNext->pNext!=NULL) { p = p->pNext; } pTemp = p->pNext; p->pNext = NULL; delete pTemp; return 0; } p1 = pHead; int i=0; while(i<k-1) { p1 = p1->pNext; i++; } pTemp = p1->pNext; p2 = p1->pNext->pNext; p1->pNext = p2; delete pTemp; return 0; } int InsertAt(int val,int k)//k之前 { PNODE p1,p2,pNew,pTemp; if(pHead == NULL)//链表为空 { return -1; } if(k<0 || k>this->GetNodeCnt()-1)//k越界 { return -1; } if(k==0)//在头节点之前插入 { pTemp = pHead; pNew = new NODE; pNew->val = val; pNew->pNext = NULL; pHead = pNew; pNew->pNext = pTemp; return 0; } p1 = pHead; int i =0; while(i<k-1) { p1 = p1->pNext; i++; } p2 = p1->pNext; pNew = new NODE; pNew->val = val; pNew->pNext = NULL; p1->pNext = pNew; pNew->pNext = p2; return 0; } int Find(int val) { int i=0; PNODE pTemp = pHead; while(pTemp != NULL) { if(pTemp->val == val) { return i; } pTemp = pTemp->pNext; i++; } return -1; } void Travel() { PNODE pTemp = this->pHead; while(pTemp!=NULL) { cout<<pTemp->val<<" "; pTemp = pTemp->pNext; } cout<<endl; } int GetNodeCnt() { int cnt=0; PNODE pTemp = pHead; while(pTemp!=NULL) { cnt++; pTemp = pTemp->pNext; } return cnt; } void sort() { int n = this->GetNodeCnt(); PNODE p1,p2; for(int i=0;i<n-1;i++) { p1 = pHead; for(int j=0;j<n-1-i;j++) { p2 = p1->pNext; if(p1->val < p2->val) { int k = p1->val; p1->val = p2->val; p2->val = k; } p1 = p1->pNext; } } } }; void main() { MyList list; for(int i=0;i<10;i++) { list.Add(i); } list.Travel(); list.sort(); list.Travel(); }