欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

如何使用遞歸和非遞歸方式反轉(zhuǎn)單向鏈表

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

問題:
給一個單向鏈表,把它從頭到尾反轉(zhuǎn)過來。比如: a -> b -> c ->d 反過來就是 d -> c -> b -> a 。

分析:
假設(shè)每一個node的結(jié)構(gòu)是:

復(fù)制代碼 代碼如下:

class Node {
 char value;
 Node next;
}

因?yàn)樵趯︽湵磉M(jìn)行反轉(zhuǎn)的時候,需要更新每一個node的“next”值,但是,在更新 next 的值前,我們需要保存 next 的值,否則我們無法繼續(xù)。所以,我們需要兩個指針分別指向前一個節(jié)點(diǎn)和后一個節(jié)點(diǎn),每次做完當(dāng)前節(jié)點(diǎn)“next”值更新后,把兩個節(jié)點(diǎn)往下移,直到到達(dá)最后節(jié)點(diǎn)。

代碼如下:
復(fù)制代碼 代碼如下:

public Node reverse(Node current) {
 //initialization
 Node previousNode = null;
 Node nextNode = null;

 while (current != null) {
  //save the next node
  nextNode = current.next;
  //update the value of "next"
  current.next = previousNode;
  //shift the pointers
  previousNode = current;
  current = nextNode;   
 }
 return previousNode;
}

上面代碼使用的是非遞歸方式,這個問題也可以通過遞歸的方式解決。代碼如下:
復(fù)制代碼 代碼如下:

public Node reverse(Node current)
 {
     if (current == null || current.next == null) return current;
     Node nextNode = current.next;
     current.next = null;
     Node reverseRest = reverse(nextNode);
     nextNode.next = current;
     return reverseRest;
 }

遞歸的方法其實(shí)是非常巧的,它利用遞歸走到鏈表的末端,然后再更新每一個node的next 值 (代碼倒數(shù)第二句)。 在上面的代碼中, reverseRest 的值沒有改變,為該鏈表的最后一個node,所以,反轉(zhuǎn)后,我們可以得到新鏈表的head。

上一篇:C語言小程序 如何判斷兩個日期之差

欄    目:C語言

下一篇:為什么要學(xué)習(xí)C語言 C語言優(yōu)勢分析

本文標(biāo)題:如何使用遞歸和非遞歸方式反轉(zhuǎn)單向鏈表

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4284.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有