清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#pragma once ////定义链表和节点/////////////////////////////////////////// ////节点类 class Node { public: ////methods Node(void); Node(int data); ~Node(void); /////members Node* next; int data; }; ////链表类 class MyLinkTable{ public: //////methods void RemovdeAt(int position,Node* head); void Add(Node* node,Node* head); void AddAfter(int position,Node* head,Node* node); bool IsEmpty(Node* head); void PrintNodes(Node* head); /////members Node* head; }; ///////////////////////////////////////////////实现/////////////////// #include "StdAfx.h" #include "Node.h" #include <iostream> /////////node methods///////////// Node::Node(void) { Node::data=0; Node::next=NULL; } Node::Node(int data) { Node::data = data; Node::next=NULL; } Node::~Node(void) { } //////////////////////end////////////////// ///////////linkTable methods////////////// ////移除某个节点////////////////// void MyLinkTable::RemovdeAt(int position,Node* head){ if(this->IsEmpty(head) || position < 0){ return; } ////如果要删除头结点 if(position == 0) { Node* n = head; head=head->next; delete n; MyLinkTable::head = head; return; } Node* p = new Node; p=head; for(int i=0;i<position-1&&p!=NULL;p=p->next,i++); if(p!=NULL) { Node* n = p->next; p->next = p->next->next; free(n); } } /////在末尾追加节点 void MyLinkTable::Add(Node* node,Node* head){ if(this->IsEmpty(head)) { return; } Node* p = head; while(p->next) { p=p->next; } p->next = node; node->next = NULL; } /////在制定位置后面添加节点 void MyLinkTable::AddAfter(int position,Node* head,Node* node){ if(this->IsEmpty(head)){ return; } Node* p = head; for(int i = 0;i < position && p->next != NULL;p=p->next,i ++); node->next = p->next; p->next = node; } ////判断链表是否非空 bool MyLinkTable::IsEmpty(Node* head){ return head==NULL; } ////打印链表 void MyLinkTable::PrintNodes(Node* head){ std::cout<<std::endl; while(head){ std::cout<<head->data<<" "; head=head->next; } } ///////////////end///////////////////