亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何對C++鏈表進行解讀分析

發布時間:2021-10-27 18:22:46 來源:億速云 閱讀:138 作者:柒染 欄目:編程語言

如何對C++鏈表進行解讀分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

C++語言是學習數據結構的很好的學習工具,能夠全面的理解了C++中C++鏈表的作用和用途,那么對于理解其C++描述,Java描述都就輕而易舉了,以后學習什么語言都不會覺得難了。

鏈表的交換節點的含義是:給定一個單鏈表,要求交換其中的任意兩個節點。注意這里鏈表的頭節點是不參與節點交換的。這個看上去是比較簡單,但是實現起來卻還是需要一定的基本功。

對于這個問題,關鍵是要用4個指針來保存兩個交換的節點的前后節點位置,具體實現請參見實現源碼。實際上,還有一個邏輯更加清晰的實現:只要用兩個指針保存當前的兩個交換節點的前一個節點。

然后依次刪除待交換節點,再在記錄的前一個節點后交替插入刪除的兩個節點,也就是實際上將這個過程轉化為了對于C++鏈表的兩個基本操作就可以完成了。但是要注意的是,這個實現中當兩個交換節點是相鄰節點的時候會出現問題,要單獨處理,具體原因手工操作一次即可得知。后一種方法這里就不給出了。

實現代碼中要說明的是,交換C++鏈表節點傳入的是兩個交換節點指針,但是為了測試簡單實現,將這兩個節點換成了待交換節點的關鍵字(值域),再到C++鏈表中定位。

具體實現源碼為:

//Link.h  #include <iostream> #include <ctime> struct Node  {  public:  Node():_val(0),_next(NULL)  {  }  Node(int val):_val(val),_next(NULL)  {  }  Node(int val,Node* next):_val(val),_next(next)  {  }  ~Node()  {  if (_next)  delete _next;  }  public:  int _val;  Node* _next;  };  typedef Node* LinkNode;  Node* CreateLink(int len,int MAX_BOUND = 100)  {  srand((unsigned int)time(NULL));  LinkNode head = new Node(-1);  LinkNode tmp = head;  for (int i = 0; i < len; ++i)  {  //tmptmp = tmp->_next = new Node(rand() % MAX_BOUND);  tmptmp = tmp->_next = new Node(i);  }  tmp->_next = NULL;  return head;  }  void ExchLinkNode (const LinkNode head,int i1,int i2)  {  //head不準被交換  LinkNode prenode1 = NULL;  //保存待交換節點node1的前一個節點  LinkNode postnode1 = NULL; //保存待交換節點node1的后一個節點  LinkNode prenode2 = NULL;  //保存待交換節點node2的前一個節點  LinkNode postnode2 = NULL; //保存待交換節點node2的后一個節點  LinkNode node1 = NULL;     //保存待交換的節點  LinkNode node2 = NULL;     //保存待交換的節點  LinkNode tmp = head;  //定位兩個節點  while ((tmp->_val != i1) && (tmp != NULL))  {  tmptmp = tmp->_next;  }  if (tmp == NULL)  {  return ;  }  else  {  node1 = tmp;  }  tmp = head;  while ((tmp->_val != i2) && (tmp != NULL))  {  tmptmp = tmp->_next;  }  if (tmp == NULL)  {  return ;  }  else  {  node2 = tmp;  }  //不得和頭節點交換  if (node1 == head)  {  return ;  }  else if (node2 == head)  {  return ;  }  //自己和自己就不必交換了  if (node1 == node2)  {  return ;  }  tmp = head;  while (tmp->_next != node1)  {  tmptmp = tmp->_next;  }  prenode1 = tmp;  tmp = head;  while (tmp->_next != node2)  {  tmptmp = tmp->_next;  }

看完上述內容,你們掌握如何對C++鏈表進行解讀分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

土默特左旗| 蓝山县| 澄城县| 镇坪县| 龙陵县| 开封市| 迭部县| 浏阳市| 巴楚县| 锡林郭勒盟| 习水县| 绍兴市| 乐业县| 鲁甸县| 鄯善县| 赞皇县| 鸡东县| 福建省| 开化县| 林州市| 金溪县| 龙岩市| 淮南市| 镇赉县| 荣昌县| 微山县| 梅河口市| 洪洞县| 温泉县| 米易县| 获嘉县| 磐石市| 湘西| 濮阳市| 琼中| 沂源县| 边坝县| 枣强县| 沐川县| 陕西省| 汾阳市|