單向環形鍊錶

2021-10-25 19:34:19 字數 4060 閱讀 5851

建立孩子節點

//孩子節點

class

child

public

intgetno()

public

void

setno

(int no)

public child getnext()

public

void

setnext

(child next)

}

建立環形鍊錶類,讓first節點為空

class

circlelinkedlist

新增節點到鍊錶中

nums為要新增節點的個數,進行判斷

定義乙個輔助變數curchild

剛開始環形鍊錶中沒有乙個節點,對於第乙個新增的節點比較特殊,先讓節點first指向它,然後執行 first.setnext(first),就是讓這乙個節點指向自己,形成乙個只有乙個節點的環形鍊錶,並讓輔助變數curchild指向它

對接下來新增的節點,只需讓輔助變數curchild指向它,再讓該節點指向第乙個節點first,就可完成節點新增的操作,最後讓輔助變數curchild指向新新增進來的節點就可

//新增孩子節點

public

void

add(

int nums)

child curchild = null;

//輔助變數

for(

int i =

1; i <= nums; i++

)else

}}

遍歷鍊錶

定義輔助變數curchild指向first

輸出curchild節點資訊,curchild = curchild.getnext();接著遍歷下乙個節點

直到curchild.getnext() == first,這時已經遍歷完鍊錶,結束遍歷

//遍歷環形鍊錶

public

void

show()

child curchild = first;

while

(true

) curchild = curchild.

getnext()

;}}

節點出圈

1.startno:表示從第幾個節點開始

countnum:表示每次數多少次

nums:總共有多少個節點

2. 先對引數進行判斷

3. 定義輔助變數helper指向鍊錶最後乙個節點(用迴圈完成操作)

4. 接著需要讓first節點指向第乙個開始計數的節點,helper節點跟在後面,移動多少個取決於(startno - 1)

5. first移動到開始計數的節點後,讓first移動到要出圈的那個節點,移動的次數取決於(countnum - 1),helper跟在first後面

6. 將該節點輸出,然後讓first指向該出圈節點的下乙個節點,讓節點helper指向first節點,即可完成節點的出圈操作

7. 最後helper == first時,鍊錶中只剩最後乙個節點,直接輸出

//孩子節點出圈

public

void

get(

int startno,

int countnum,

int nums)

child helper = first;

//讓輔助變數helper指向鍊錶最後乙個孩子節點

while

(true

) helper = helper.

getnext()

;}//startno:表示從第幾個節點開始計數

//讓first節點指向該節點,讓helper節點跟在first後面乙個節點

for(

int i =

0; i < startno -

1; i++

)while

(true

)//讓first節點移動到要出圈的那個節點

for(

int i =

1; i <= countnum -

1; i++

) system.out.

println

("孩子節點:"

+ first.

getno()

);//將first節點出圈

first = first.

getnext()

; helper.

setnext

(first);}

//最後乙個孩子節點

system.out.

println

("最後的孩子節點:"

+ first.

getno()

);}

package linkedlist;

/** * created by lenovo on 2021/3/17.

*/public

class

circlesinglelinkedlist

}class

circlelinkedlist

child curchild = null;

//輔助變數

for(

int i =

1; i <= nums; i++

)else}}

//遍歷環形鍊錶

public

void

show()

child curchild = first;

while

(true

) curchild = curchild.

getnext()

;}}//孩子節點出圈

public

void

get(

int startno,

int countnum,

int nums)

child helper = first;

//讓輔助變數helper指向鍊錶最後乙個孩子節點

while

(true

) helper = helper.

getnext()

;}//startno:表示從第幾個節點開始計數

//讓first節點指向該節點,讓helper節點跟在first後面乙個節點

for(

int i =

0; i < startno -

1; i++

)while

(true

)//讓first節點移動到要出圈的那個節點

for(

int i =

1; i <= countnum -

1; i++

) system.out.

println

("孩子節點:"

+ first.

getno()

);//將first節點出圈

first = first.

getnext()

; helper.

setnext

(first);}

//最後乙個孩子節點

system.out.

println

("最後的孩子節點:"

+ first.

getno()

);}}

//孩子節點

class

child

public

intgetno()

public

void

setno

(int no)

public child getnext()

public

void

setnext

(child next)

}

單向環形鍊錶

問題描述 設編號為 1,2,3,4 n的n個人圍坐一圈,約定編號為第k 1 k n 的那個人,從1開始報數,數到m的那個人出列,它的下一位又開始從1報數,數到m的那個人又出列,依次類推,知道所有人出列為止,由此產生了乙個出隊編號的序列。建立環形鍊錶並且遍歷 實現 public class josep...

單向環形鍊錶

一 單向環形鍊錶的結構 二 單向環形鍊錶的使用場景 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的...

單向環形鍊錶

單向環形列表 單向環形列表 建立單向環形列表 先建立乙個節點,構成環形,並且讓first節點指向這個節點,這個first節點用來建立環形鍊錶 當我們後面建立的節點,依次新增到這個環形鍊錶中,定義乙個輔助變數temp指向first 遍歷環形鍊錶 定義乙個輔助節點temp指向first節點,通過乙個wh...