#includeusing namespace std; class MylinkedList { public: MylinkedList() { //空表,仅仅含有头结点 head = new LNode(0,NULL); } int get(int index) { LNode* p = head->next; //初始化,p指向第一个元素结点 int k = 0; //用于计数 while (p && k < index) { //p指向第i个元素结点或p为空退出循环 p = p->next; k++; } //循环退出的条件为k=i或达到单链表结尾 if (!p || k > index) return -1; //第index个元素不存在 int e = p->val; return e; } void addAtHead(int val) { LNode* p=new LNode(val,head->next); //新建结点 head->next = p; } void addAtTail(int val) { LNode* p = head; //利用p进行定位 LNode* temp = new LNode(val, NULL); //要插 while (p->next) { //p指向了最后一个结点 p = p->next; } p->next = temp; } void addAtIndex(int index, int val) { LNode* p = head; //p指向头结点 int k = -1; // k为计数器 while (p && k < index - 1) { //直到p指向第i-1个或p为空 p = p->next; k++; } if (!p || k > index - 1) return; //无法插入 LNode* s = new LNode(val, p->next); //新建结点 p->next = s; } void deleteAtIndex(int index) { LNode* p = head; //p指向头结点 int k = -1; //k为计数器 while (p->next && k < index - 1) { //查找被删除结点的前驱 p = p->next; k++; } if (!(p->next) || k > index - 1) return; LNode* q = p->next; //令q指向待删除的结点 p->next = q->next; } void print() { LNode* p = head->next; while (p) { cout << p->val << " "; p = p->next; } cout << endl; } private: struct LNode { int val; struct LNode* next; LNode(int x,LNode* node) { val = x; next = node; } }; LNode* head; }; //测试过程 int main() { MylinkedList* l = new MylinkedList(); l->print(); l->addAtHead(1); l->print(); l->addAtTail(3); l->print(); l->addAtIndex(1, 2); l->print(); l->get(1); l->print(); l->deleteAtIndex(1); l->print(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)