链表需要包含的操作有头插法建立链表、尾插法建立链表、在指定位置插入元素、打印链表、删除链表、寻找中间元素、单链表 1 // 定义一个链表及相关操作
2 #include<iostream> 3 using namespace std; 4 5 struct LNode 6 { 7 int data; 8 LNode *next; 9 }; 10 11 class LinkList{ 12 public: 13 LinkList(){head = new LNode;head->next=NULL}; 14 ~LinkList(){delete head;}; 15 16 void CreateF(int n); // 头插法建立链表 17 void CreateR(int n); // 尾插法建立链表 18 19 void Insert(int i,int _data); // 在指定位置插入链表 20 void Output(); //打印链表 21 void Clear(); // 删除链表 22 23 LNode* findMid(); // 快速找到中间元素并返回其指针 24 LNode *reverse(LNode* head); // 单链表逆置 25 private: 26 LNode *head; 27 } 28 29 30 void LinkList::CreateF(int n) 31 { 32 LNode *p; 33 LNode *s; 34 p = head; 35 36 for(int i =0;i<n;++i){ 37 s = new LNode; 38 cin>>s->data; 39 s->next = p->next; 40 p->next = s; 41 } 42 } 43 44 void LinkList::CreateR(int n) 45 { 46 LNode *p; 47 LNode *r; 48 p = head; 49 for(int i = 0;i<n;++i){ 50 r = new LNode; 51 cin>>r->data; 52 p->next = r; 53 p = p->next; 54 } 55 } 56 57 58 void LinkList::Insert(int i,int _data) 59 { 60 LNode *temp; 61 temp = head; 62 int j = 0; 63 while(temp&&j<i-1){ // 找到i的位置 64 temp = temp->next; 65 j++; 66 } 67 if(!temp||j>i-1){ 68 cout<<"False!"<<endl; 69 }else{ 70 LNode *s = new LNode; 71 s->data = _data; 72 s->next = temp->next; 73 temp->next = s; 74 } 75 } 76 77 void LinkList::Output() 78 { 79 LNode *p; 80 p = head->next; // 注意不要写成p=head,因为头结点中没有保存数据 81 while(p){ 82 cout<<p->data<<" "; 83 p = p->next; 84 } 85 } 86 87 void LinkList::Clear() 88 { 89 LNode *p,*q; 90 p = head; 91 while(p){ 92 q=p->next; 93 delete p; 94 p=q; 95 } 96 head->next = NULL; // 这一步不能丢 97 98 } 99 100 LNode* LinkList::findMid() 101 { 102 LNode *p,*q; 103 p=head; 104 q=head; 105 while(p!=NULL&&p2!=NULL){ 106 p = p->next; 107 q = q->next->next; 108 } 109 return p; 110 } 111 112 LNode* LinkList::reverse(LNode* head) 113 { 114 if(head==NULL||head->next==NULL) 115 return head; 116 LNode *_pre=NULL,*_next=NULL; 117 118 while(head!=NULL){ 119 _next = head->next; 120 head->next = _pre; 121 _pre = head; 122 head = _next; 123 } 124 return head; 125 }