第一種情況,其實(shí)可以考慮用頭插法,來(lái)實(shí)現(xiàn)逆置。下面的算法是基于頭插法的思想,逆置鏈表的,僅供參考。
成都創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、南和網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為南和等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
最簡(jiǎn)單的算法就是設(shè)置一個(gè)臨時(shí)變量,就像交換兩個(gè)變量一樣交換。更好的是使用鏈表,當(dāng)然也可以使用ArrayCopy,Copy的時(shí)候把源數(shù)組最后一個(gè)賦給新數(shù)組的第一個(gè),一個(gè)加,一個(gè)減。
我看了好長(zhǎng)時(shí)間,終于明白你哪里錯(cuò)了。1)先說(shuō)一個(gè)你的程序不是算法問(wèn)題的錯(cuò)誤,你的鏈表的header里面不應(yīng)該存放具體數(shù)據(jù),也就是說(shuō)header里面的data應(yīng)該不用。
用java的集合類(lèi)就可以了,比如ArrayList,Vector,HashMap等,比如要在A(yíng)rrayList的第i位置插入個(gè)值a,直接用ArrayList.add(i,a);就可以了。
如果你一定要用鏈表:class AB{ String ip;int socket;String fileName AB next;這里相當(dāng)于c的指針了 } /// 用Map吧,好實(shí)現(xiàn)多了。
單向鏈表插入結(jié)點(diǎn)過(guò)程:源代碼中的的插入結(jié)點(diǎn)函數(shù)我設(shè)置了一個(gè)指定位置,就是在指定位置插入結(jié)點(diǎn)。
鏈表是類(lèi)似一種數(shù)據(jù)結(jié)構(gòu)的東西,就是分別存放有地址以及數(shù)據(jù)單項(xiàng)鏈表一般是上一個(gè)存放地址的地方存放下一個(gè)節(jié)點(diǎn)的地址,而雙向的就是有兩個(gè)存放地址的地方,分別存上一個(gè)以及下一個(gè)的地址。
你的remove方法不對(duì),你的方法每次刪掉的是從head開(kāi)始第m個(gè)位置的節(jié)點(diǎn),但約瑟夫環(huán)需要的是要?jiǎng)h掉每次循環(huán)數(shù)到m的位置的節(jié)點(diǎn)。remove方法可以去掉,再把out方法改一下就可以了。
java的鏈表不該以這樣的方式來(lái)寫(xiě),除非你的題目就是如此 你希望解決的問(wèn)題是你作為problem標(biāo)記出的那幾個(gè)地方,但實(shí)際上,別的方法也未必?zé)o誤。
在Java單鏈表中,節(jié)點(diǎn)類(lèi)通常包含兩個(gè)屬性:一個(gè)存儲(chǔ)數(shù)據(jù)的變量和一個(gè)指向下一個(gè)節(jié)點(diǎn)的變量。為了保證數(shù)據(jù)的封裝性,通常會(huì)將這兩個(gè)屬性都用private修飾,然后提供對(duì)應(yīng)的getter和setter方法來(lái)訪(fǎng)問(wèn)和修改這些屬性。
逆置有兩種方法,第一是把所有節(jié)點(diǎn)反過(guò)來(lái)。還有一種就是改變節(jié)點(diǎn)中的值。第一種情況,其實(shí)可以考慮用頭插法,來(lái)實(shí)現(xiàn)逆置。下面的算法是基于頭插法的思想,逆置鏈表的,僅供參考。
1、1)先說(shuō)一個(gè)你的程序不是算法問(wèn)題的錯(cuò)誤,你的鏈表的header里面不應(yīng)該存放具體數(shù)據(jù),也就是說(shuō)header里面的data應(yīng)該不用。
2、} 將數(shù)據(jù)域定義成Object類(lèi)是因?yàn)镺bject類(lèi)是廣義超類(lèi),任何類(lèi)對(duì)象都可以給其賦值,增加了代碼的通用性。為了使鏈表可以被訪(fǎng)問(wèn)還需要定義一個(gè)表頭,表頭必須包含指向第一個(gè)結(jié)點(diǎn)的指針和指向當(dāng)前結(jié)點(diǎn)的指針。
3、幾位的回答都比較清楚了,我想另外說(shuō)點(diǎn)問(wèn)題 你本就不應(yīng)該加入‘表尾’這個(gè)屬性,在數(shù)據(jù)結(jié)構(gòu)中鏈表的特點(diǎn)就是能用一個(gè)地址帶一個(gè)長(zhǎng)串?dāng)?shù)據(jù)鏈的,不用這個(gè)屬性的話(huà)思路會(huì)更加清晰。
4、這樣就能利用遞歸循壞的比較node上的每個(gè)值直到找到最大值的node。你可以深刻的理解一下遞歸,recursion, 可以看下斐波那契遞歸方法等。
5、}} //完成添加操作。這個(gè)其實(shí)就是C種的鏈表,不過(guò)Java中沒(méi)有指針,所以利用對(duì)象代替了。原理是一樣的。如果覺(jué)得不好理解,可以簡(jiǎn)單的把MagazineNode類(lèi)看做Magazine類(lèi)的專(zhuān)屬指針類(lèi)。如有不明,繼續(xù)追問(wèn)。望采納。