最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

單鏈表實(shí)現(xiàn)反轉(zhuǎn)的3種方法示例代碼

 更新時(shí)間:2019年02月11日 11:03:10   作者:攻城猿bilibili  
單鏈表的反轉(zhuǎn)是常見的面試題目,下面這篇文章主要給大家介紹了關(guān)于單鏈表實(shí)現(xiàn)反轉(zhuǎn)的3種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

單鏈表的操作是面試中經(jīng)常會(huì)遇到的問題,今天總結(jié)一下反轉(zhuǎn)的幾種方案:

1 ,兩兩對(duì)換

2, 放入數(shù)組,倒置數(shù)組

3, 遞歸實(shí)現(xiàn)

代碼如下:

#include<stdio.h>
#include<malloc.h>
typedef struct Node
{

 int data;
 struct Node *pnext;


} Node,*pnode;
pnode CreateNode()
{

 pnode phead=(pnode)malloc(sizeof(Node));
 if(phead==NULL)
 {
  printf("fail to allocate memory");
  return -1;
 }
 phead->pnext=NULL;
 int n;
 pnode ph=phead;
 for(int i=0; i<5; i++)
 {

  pnode p=(pnode)malloc(sizeof(Node));
  if(p==NULL)
  {
   printf("fail to allocate memory");
   return -1;
  }
  p->data=(i+2)*19;
  phead->pnext=p;
  p->pnext=NULL;
  phead=phead->pnext;


 }
 return ph;
}
int list(pnode head)
{
 int count=0;
 printf("遍歷結(jié)果:\n");
 while(head->pnext!=NULL)
 {
  printf("%d\t",head->pnext->data);
  head=head->pnext;
  count++;
 }
 printf("鏈表長(zhǎng)度為:%d\n",count);
 return count;
}
pnode reverse2(pnode head)//兩兩節(jié)點(diǎn)之間不斷交換
{
 if(head == NULL || head->next == NULL)
 return head;
 pnode pre = NULL;
 pnode next = NULL;
 while(head != NULL){
  next = head->next;
  head->next = pre;
  pre = head;
  head = next;
}
 return pre;
}
void reverse1(pnode head,int count)//把鏈表的節(jié)點(diǎn)值放在數(shù)組中,倒置數(shù)組
{
 int a[5]= {0};

 for(int i=0; i<count,head->pnext!=NULL; i++)
 {
  a[i]=head->pnext->data;
  head=head->pnext;

 }
 for(int j=0,i=count-1; j<count; j++,i--)
  printf("%d\t",a[i]);

}

pnode reverse3(pnode pre,pnode cur,pnode t)//遞歸實(shí)現(xiàn)鏈表倒置
{

 cur -> pnext = pre;
 if(t == NULL)
  return cur; //返回?zé)o頭節(jié)點(diǎn)的指針,遍歷的時(shí)候注意
 reverse3(cur,t,t->pnext);

}

pnode new_reverse3(pnode head){ //新的遞歸轉(zhuǎn)置

 if(head == NULL || head->next == NULL)
  return head;
 pnode new_node = new_reverse3(head->next);
 head->next->next = head;
 head->next = NULL;
 return new_node; //返回新鏈表頭指針

}
int main()
{
 pnode p=CreateNode();
 pnode p3=CreateNode();
 int n=list(p);
 printf("1反轉(zhuǎn)之后:\n");
 reverse1(p,n);
 printf("\n");
 printf("2反轉(zhuǎn)之后:\n");
 pnode p1=reverse2(p);
 list(p1);
 p3 -> pnext = reverse3(NULL,p3 -> pnext,p3->pnext->pnext);
 printf("3反轉(zhuǎn)之后:\n");
 list(p3);
 free(p);
 free(p1);
 free(p3);
 return 0;
}

毫無疑問,遞歸是解決的最簡(jiǎn)單方法,四行就能解決倒置問題。

思路參考:http://www.fzitv.net/article/156043.htm

這里注意: head ->next = pre; 以及 pre = head->next,前者把head->next 指向 pre,而后者是把head->next指向的節(jié)點(diǎn)賦值給pre。如果原來head->next 指向 pnext節(jié)點(diǎn),前者則是head重新指向pre,與pnext節(jié)點(diǎn)斷開,后者把pnext值賦值給pre,head與pnext并沒有斷開。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • C++中如何修改const變量你知道嗎

    C++中如何修改const變量你知道嗎

    這篇文章主要為大家詳細(xì)介紹了C++修改const變量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++?Qt開發(fā)之使用QNetworkAccessManager實(shí)現(xiàn)Web網(wǎng)頁訪問

    C++?Qt開發(fā)之使用QNetworkAccessManager實(shí)現(xiàn)Web網(wǎng)頁訪問

    Qt?是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,本文主要介紹了如何運(yùn)用QNetworkAccessManager組件實(shí)現(xiàn)Web網(wǎng)頁訪問,需要的可以參考下
    2024-03-03
  • C語言實(shí)現(xiàn)俄羅斯方塊的六種模式詳程建議收藏

    C語言實(shí)現(xiàn)俄羅斯方塊的六種模式詳程建議收藏

    遲早一定會(huì)掛掉的俄羅斯方塊,為什么至今仍是世界游戲之王?它是怎么編寫的?本文將給大家詳細(xì)介紹六種模式的實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2022-02-02
  • 一道面試題教你輕松玩轉(zhuǎn)C++指針

    一道面試題教你輕松玩轉(zhuǎn)C++指針

    下面小編就為大家?guī)硪黄钊肜斫鈉++指針的指針和指針的引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2021-09-09
  • C++命名空間namespace的介紹與使用

    C++命名空間namespace的介紹與使用

    今天小編就為大家分享一篇關(guān)于C++命名空間namespace的介紹與使用,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 一篇文章了解c++中的new和delete

    一篇文章了解c++中的new和delete

    C語言提供了malloc和free兩個(gè)系統(tǒng)函數(shù),完成對(duì)堆內(nèi)存的申請(qǐng)和釋放,而C++則提供了兩個(gè)關(guān)鍵字new和delete,下面這篇文章主要給大家介紹了如何通過一篇文章了解c++中new和delete的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 從C語言過渡到C++之基本變化

    從C語言過渡到C++之基本變化

    在之前的C++代碼訓(xùn)練營(yíng)系列中,我試圖用完成具體項(xiàng)目的方式給大家介紹C++,但后來大家反饋說這樣從C過渡到C++有點(diǎn)跟不上。于是我又專門設(shè)計(jì)了這個(gè)《從C到C++》的過渡專題,我準(zhǔn)備通過10篇文章介紹一下C++和C的重要區(qū)別。
    2017-07-07
  • C語言實(shí)現(xiàn)SM4加解密方式

    C語言實(shí)現(xiàn)SM4加解密方式

    這篇文章主要介紹了C語言實(shí)現(xiàn)SM4加解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 深入理解C++移位運(yùn)算符

    深入理解C++移位運(yùn)算符

    下面小編就為大家?guī)硪黄钊肜斫釩++移位運(yùn)算符。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • C/C++ Qt QChart繪圖組件的具體使用

    C/C++ Qt QChart繪圖組件的具體使用

    QtCharts 組件是QT中提供圖表繪制的模塊,用來繪制常規(guī)圖形,本文就詳細(xì)的介紹了QChart的使用,以及柱狀圖,折線圖等常用的圖形的實(shí)現(xiàn),感興趣的可以了解一下
    2021-11-11

最新評(píng)論

睢宁县| 康乐县| 长治市| 资源县| 新津县| 宁阳县| 托克逊县| 全椒县| 砀山县| 呼和浩特市| 临澧县| 罗江县| 华池县| 横山县| 临沭县| 通榆县| 吴江市| 胶南市| 北碚区| 永靖县| 贺州市| 石柱| 百色市| 六安市| 临泉县| 华安县| 宣武区| 旅游| 白山市| 永和县| 嘉义县| 张家口市| 镇雄县| 三穗县| 曲阜市| 陕西省| 鄂托克旗| 金川县| 靖江市| 文成县| 杭锦旗|