定义一个单链表及相关操作


链表需要包含的操作有头插法建立链表、尾插法建立链表、在指定位置插入元素、打印链表、删除链表、寻找中间元素、单链表  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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM