定義一個單鏈表及相關操作


鏈表需要包含的操作有頭插法建立鏈表、尾插法建立鏈表、在指定位置插入元素、打印鏈表、刪除鏈表、尋找中間元素、單鏈表  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