日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表逆向

發(fā)布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表逆向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://blog.csdn.net/heyabo/article/details/7610732

對于單鏈表的逆置有兩種方法可以實現(xiàn):

(1)利用輔助指針

? ? ? ? ?基本思想:在遍歷結(jié)點過程中,設(shè)置輔助指針,用于記錄先前遍歷的結(jié)點。這樣依次編譯的過程中只需修改其后繼結(jié)點的next域即可。

? ? ? ? ?實現(xiàn)代碼:

[cpp]?view plaincopy print?
  • typedef?int?DataType;?//類型定義??
  • typedef?struct?node{??//單鏈表定義??
  • ??????DataType?data;??
  • ??????struct?node*?next;??
  • }LinkedNode,*LinkList;??
  • void?ReverseList(LinkList&?ListHead)??
  • {??
  • ????cout<<"Begin?to?Reverse?the?List"<<endl;??
  • ????if(?(NULL==ListHead)||(NULL==ListHead->next)?)return?;??//邊界檢測??
  • ????LinkedNode*?pPre=ListHead;????//先前指針??
  • ????LinkedNode*?pCur=pPre->next;??//當(dāng)前指針??
  • ????LinkedNode*?pNext=NULL;???????//后繼指針??
  • ????while(pCur!=NULL)??
  • ????{??
  • ????????pNext=pCur->next;??
  • ????????pCur->next=pPre;??
  • ????????pPre=pCur;??
  • ????????pCur=pNext;??
  • ????}??
  • ????ListHead->next=NULL;??
  • ????ListHead=pPre;????????//記錄下新的頭結(jié)點??
  • }??

  • ? ? ? ?? ? ? ? ??

    ? ? ? ? ? ?示意圖:

    (2)遞歸

    ? ? ? ? ?基本思想:在對當(dāng)前結(jié)點逆置時,先遞歸地逆置其后繼結(jié)點,然后將后繼結(jié)點指向當(dāng)前結(jié)點。

    ? ? ? ? ?實現(xiàn)代碼:

    寫了兩個版本

    I、返回值為空

    [cpp]?view plaincopy print?
  • void?ReverseList(LinkedNode*?pCur,LinkList&?ListHead)??
  • {??
  • ????if(?(NULL==pCur)||(NULL==pCur->next)?)??
  • ????{??
  • ????????ListHead=pCur;??
  • ????}??
  • ????else??
  • ????{??
  • ????????LinkedNode*?pNext=pCur->next;??
  • ????????ReverseList(pNext,ListHead);?//遞歸逆置后繼結(jié)點??
  • ????????pNext->next=pCur;????????????//將后繼結(jié)點指向當(dāng)前結(jié)點。??
  • ????????pCur->next=NULL;??
  • ????}??
  • }??


  • II、返回值為結(jié)點類型

    [cpp]?view plaincopy print?
  • LinkedNode*?ReverseList(LinkedNode*?pCur,LinkList&?ListHead)??
  • {??
  • ????cout<<"Begin?to?Reverse?the?List"<<endl;??
  • ????if(?(NULL==pCur)||(NULL==pCur->next)?)??
  • ????{??
  • ????????????ListHead=pCur;??
  • ????????????return?pCur;??
  • ????}??
  • ????else??
  • ????{??
  • ????????LinkedNode*?pTemp=ReverseList(pCur->next,ListHead);?//遞歸逆置后繼結(jié)點??
  • ????????pTemp->next=pCur;???//將后繼結(jié)點指向當(dāng)前結(jié)點??
  • ????????pCur->next=NULL;??
  • ????????return?pCur;??
  • ????}??
  • }??



  • ? ? ? ? ?示意圖:

    ? ? ? ??

    下面給出完整的程序:

    [cpp]?view plaincopy print?
  • #include<iostream>??
  • using?namespace?std;??
  • const?int?N=6;??
  • typedef?int?DataType;//類型定義??
  • typedef?struct?node{?//單鏈表??
  • ??????DataType?data;??
  • ??????struct?node*?next;??
  • }LinkedNode,*LinkList;??
  • /****由數(shù)組創(chuàng)建單鏈表****/??
  • LinkList?CreateList(DataType?a[N])??
  • {??
  • ????LinkedNode*?ListHead=new?LinkedNode();??
  • ????ListHead->data=a[0];??
  • ????ListHead->next=NULL;??
  • ????for(int?i=N-1;i>=1;i--)??
  • ????{??
  • ????????LinkedNode*?p=new?LinkedNode();??
  • ????????p->data=a[i];??
  • ????????p->next=ListHead->next;??
  • ????????ListHead->next=p;??
  • ????}??
  • ????return?ListHead;??
  • }??
  • /****輸出單鏈表****/??
  • void?PrintList(LinkList?ListHead)??
  • {??
  • ????if(NULL==ListHead)cout<<"The?List?is?empty!"<<endl;??
  • ????else??
  • ????{??
  • ????????LinkedNode*?p=ListHead;??
  • ????????while(p!=NULL)??
  • ????????{??
  • ????????????cout<<p->data<<"?";??
  • ????????????p=p->next;??
  • ????????}??
  • ????????cout<<endl;??
  • ????}??
  • }??
  • void?ReverseList(LinkedNode*?pCur,LinkList&?ListHead)??
  • {??
  • ????if(?(NULL==pCur)||(NULL==pCur->next)?)??
  • ????{??
  • ????????ListHead=pCur;??
  • ????}??
  • ????else??
  • ????{??
  • ????????LinkedNode*?pNext=pCur->next;??
  • ????????ReverseList(pNext,ListHead);?//遞歸逆置后繼結(jié)點??
  • ????????pNext->next=pCur;????????????//將后繼結(jié)點指向當(dāng)前結(jié)點。??
  • ????????pCur->next=NULL;??
  • ????}??
  • }??
  • int?main()??
  • {??
  • ????int?a[N]={1,2,3,4,5,6};???
  • ????LinkedNode*?list=CreateList(a);??
  • ????PrintList(list);??
  • ????LinkedNode*pTemp=list;??
  • ????ReverseList(pTemp,list);??
  • ????PrintList(list);??
  • ????return?0;??
  • }??

  • 總結(jié)

    以上是生活随笔為你收集整理的单链表逆向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。