久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單鏈表就地轉置的問題

作者:armccd   來源:本站原創   點擊數:  更新時間:2010年12月16日   【字體:

今天終于弄懂了關于單鏈表就地轉置的問題!

    還是在面試的時候遇到過的這個問題。雖然題目沒說就地轉置(也就是所謂的利用現有結點),但要求肯定是這樣的。所以用附加結點寫的答案可想而知是不令人滿意的。

   當時的想法是把整個單鏈表從尾到頭的整個轉置,才會想到要附加原單鏈表結點個數的結點空間。今天發現了另外一種方法,就是分段轉置的方法。

    例如:A->B->C->D->E->F->G->^  (^表示結束,即NULL)

    在要求不附加結點空間的時候轉置,可這樣實現:A->^,B->A,C->B,D->C,E->D,F->E,G->F

按這種要求,即可用如下代碼:

node *reverse(node *head)

{

 node *temp1,*temp2,*temp3;

 if((!head)||(!(head->next)))    //鏈表為空,則返回,鏈表只有一個結點的話,轉置即為本身,也只需返回本身

  return head;

temp1=head;

temp2=temp1->next;

temp3=temp2->next;

head->next=NULL;

while(temp3!=NULL)

 {

     temp2->next=temp1;     //temp2->temp1 (A->B段的轉置)

     temp1=temp2;      //temp1,temp2,temp3后移一個結點,繼續下一段的轉置 

     temp2=temp3;

     temp3=temp3->next;

   }   //在跳出while()后,并不是所有段都轉置完了,當temp3=NULL時,temp2=G temp1=F還沒有轉置

temp2->next=temp1;      //在temp3==NULL時,還應該繼續建立一個連接。

return temp2

}

以上述鏈表為例:程序開始:temp1=A temp2=B temp3=C A->NULL

在while()中運行第一次后的結果為:B->A temp1=B temp2=C temp3=D

在while()中運行第二次后的結果為:C->B temp1=C temp2=D temp3=E

。。。。。。

。。。。。。

在while()中運行最后一次的結果為:F->E temp1=F temp2=G temp3=NULL

退出while()后再運行一次temp2->next=temp1 結果為:G->F

所以,在執行到return 之前程序運行結果為:temp2=G->F->E->D->C->B->A->^

因此,顯然,需要返回的頭結點應該是temp2

注:通過分析程序運行頭部,可進行一點改進,即while()循環的參數可用temp2,只有當temp2=NULL時,程序才應該停止轉置。而相應的返回則應該為temp1
 

關閉窗口

相關文章

主站蜘蛛池模板: 久草网免费 | 久久久这里只有17精品 | 日韩一级免费观看 | 国产做a爱片久久毛片 | 欧美精品中文字幕久久二区 | 在线欧美小视频 | 蜜桃精品噜噜噜成人av | 久久精品国产一区二区电影 | 九九九视频在线 | 久久久久久久久中文字幕 | 国产午夜精品一区二区三区嫩草 | 国产一区二区毛片 | 91亚洲国产 | 欧美 日韩 国产 成人 在线 91 | 人人看人人搞 | 中文字幕第二区 | 狠狠操狠狠操 | 亚洲一区二区三区免费视频 | 久久新| 国产91在线播放 | 国产精品日日做人人爱 | 日本亚洲精品成人欧美一区 | 亚洲精品乱码久久久久久蜜桃 | 成人国产精品久久 | 狠狠色综合久久婷婷 | 国产精品久久久久久一区二区三区 | 国产精品国产成人国产三级 | 成人午夜精品 | 97国产一区二区 | 99资源| 欧美日韩电影在线 | 亚洲精品日韩一区二区电影 | 久久久久久91 | 日本免费黄色 | 免费一区二区 | 古典武侠第一页久久777 | av在线免费网 | 超碰男人天堂 | 中文字幕亚洲一区二区三区 | 久久久久久亚洲 | 亚洲成人精 |