如何對(duì)C++鏈表進(jìn)行解讀分析

如何對(duì)C++鏈表進(jìn)行解讀分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供沙依巴克網(wǎng)站建設(shè)、沙依巴克做網(wǎng)站、沙依巴克網(wǎng)站設(shè)計(jì)、沙依巴克網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、沙依巴克企業(yè)網(wǎng)站模板建站服務(wù),十余年沙依巴克做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

C++語(yǔ)言是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的很好的學(xué)習(xí)工具,能夠全面的理解了C++中C++鏈表的作用和用途,那么對(duì)于理解其C++描述,Java描述都就輕而易舉了,以后學(xué)習(xí)什么語(yǔ)言都不會(huì)覺(jué)得難了。

單鏈表的交換節(jié)點(diǎn)的含義是:給定一個(gè)單鏈表,要求交換其中的任意兩個(gè)節(jié)點(diǎn)。注意這里鏈表的頭節(jié)點(diǎn)是不參與節(jié)點(diǎn)交換的。這個(gè)看上去是比較簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)卻還是需要一定的基本功。

對(duì)于這個(gè)問(wèn)題,關(guān)鍵是要用4個(gè)指針來(lái)保存兩個(gè)交換的節(jié)點(diǎn)的前后節(jié)點(diǎn)位置,具體實(shí)現(xiàn)請(qǐng)參見(jiàn)實(shí)現(xiàn)源碼。實(shí)際上,還有一個(gè)邏輯更加清晰的實(shí)現(xiàn):只要用兩個(gè)指針保存當(dāng)前的兩個(gè)交換節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。

然后依次刪除待交換節(jié)點(diǎn),再在記錄的前一個(gè)節(jié)點(diǎn)后交替插入刪除的兩個(gè)節(jié)點(diǎn),也就是實(shí)際上將這個(gè)過(guò)程轉(zhuǎn)化為了對(duì)于C++鏈表的兩個(gè)基本操作就可以完成了。但是要注意的是,這個(gè)實(shí)現(xiàn)中當(dāng)兩個(gè)交換節(jié)點(diǎn)是相鄰節(jié)點(diǎn)的時(shí)候會(huì)出現(xiàn)問(wèn)題,要單獨(dú)處理,具體原因手工操作一次即可得知。后一種方法這里就不給出了。

實(shí)現(xiàn)代碼中要說(shuō)明的是,交換C++鏈表節(jié)點(diǎn)傳入的是兩個(gè)交換節(jié)點(diǎn)指針,但是為了測(cè)試簡(jiǎn)單實(shí)現(xiàn),將這兩個(gè)節(jié)點(diǎn)換成了待交換節(jié)點(diǎn)的關(guān)鍵字(值域),再到C++鏈表中定位。

具體實(shí)現(xiàn)源碼為:

//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不準(zhǔn)被交換  LinkNode prenode1 = NULL;  //保存待交換節(jié)點(diǎn)node1的前一個(gè)節(jié)點(diǎn)  LinkNode postnode1 = NULL; //保存待交換節(jié)點(diǎn)node1的后一個(gè)節(jié)點(diǎn)  LinkNode prenode2 = NULL;  //保存待交換節(jié)點(diǎn)node2的前一個(gè)節(jié)點(diǎn)  LinkNode postnode2 = NULL; //保存待交換節(jié)點(diǎn)node2的后一個(gè)節(jié)點(diǎn)  LinkNode node1 = NULL;     //保存待交換的節(jié)點(diǎn)  LinkNode node2 = NULL;     //保存待交換的節(jié)點(diǎn)  LinkNode tmp = head;  //定位兩個(gè)節(jié)點(diǎn)  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;  }  //不得和頭節(jié)點(diǎn)交換  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;  }

看完上述內(nèi)容,你們掌握如何對(duì)C++鏈表進(jìn)行解讀分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

名稱欄目:如何對(duì)C++鏈表進(jìn)行解讀分析
本文路徑:http://bm7419.com/article48/gijgep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、定制開(kāi)發(fā)ChatGPT、網(wǎng)站收錄、自適應(yīng)網(wǎng)站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)