歡迎您光臨本站 註冊首頁

C++實現簡單單向鏈表

←手機掃碼閱讀     qp18502452 @ 2020-06-10 , reply:0

本文實例為大家分享了C++實現簡單單向鏈表的具體代碼,供大家參考,具體內容如下

為了練習一下對鏈表的理解,嘗試手動造輪子,實現單向鏈表的右添加,左添加和刪除的功能。

頭文件

  #pragma once  #includeusing namespace std;  struct Node//節點  {   int value;   Node* next;   Node(int a = 0, Node* n = NULL) :value(a), next(n) {}  };  class List  {  private:   Node* head = NULL;//頭指針   Node* tail = NULL;//尾指針,便於在尾部添加節點   int size = 0;  public:   int getSize() { return size; }//獲取鏈表大小   void print();//打印鏈表   void append(int a);//右添加   void appendleft(int a);//左添加   void remove(int a);//刪除節點  };

 

源文件

#include "List.h"

  void List::append(int a)  {   Node *p = new Node(a);   if (head)   {   tail->next = p;   tail = p;   }   else   {   head = p;   tail = p;   }   size++;  }  void List::appendleft(int a)  {   Node *p = new Node(a);   if (head)   {   p->next = head;   head = p;   }   else   {   head = p;   tail = p;   }   size++;  }  void List::remove(int a)  {   Node* p = head;   bool flag = false;   if (!head)   {   flag = false;   cout << "鏈表已空,無需刪除!" << endl;   }   else if (head->value == a && head != tail)   {   head = head->next;   delete p;   size--;   flag = true;   cout << "刪除成功!" << endl;   }   else if (head->value == a && head == tail)   {   head = NULL, tail = NULL;   delete p;   size--;   flag = true;   cout << "刪除成功!" << endl;   }   else   {   Node*q = head->next;   while (q)   {    if (q->value == a && q != tail)    {    p->next = q->next;    delete q;    size--;    flag = true;    cout << "刪除成功!" << endl;    break;    }    else if (q->value == a && q == tail)    {    p->next = NULL;    tail = p;    delete q;    size--;    flag = true;    cout << "刪除成功!" << endl;    break;    }    else    {    p = q;    q = p->next;    }   }   if (!flag)    cout << "查無此值:" << a << endl;   }  }  void List::print()  {   if (!head)   cout << "鏈表為空,無法輸出!" << endl;   else   {   cout << "鏈表為:" ;   Node*p = head;   while (p)   {    cout << p->value << " ";    p = p->next;   }   cout << endl;   }  }

 

主程序驗證

  int main()  {   List list1;   list1.append(3);   list1.append(4);   list1.appendleft(5);   list1.appendleft(6);   list1.append(2);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(5);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(7);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(6);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(4);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(3);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   list1.remove(2);   cout << "----鏈表大小:" << list1.getSize() << endl;   list1.print();   system("pause");   return 0;  }

 

驗證結果

                                                       

   


[qp18502452 ] C++實現簡單單向鏈表已經有274次圍觀

http://coctec.com/docs/c/language/show-post-237861.html