Java 指定範圍的鍊錶反轉

2021-09-24 10:14:55 字數 2222 閱讀 9102

鍊錶反轉的大致思路

反轉鍊錶只需要不斷地將當前節點的下乙個節點的 next 指向當前節點, 然後將下個節點設定為當前節點,

設定兩個引用, cur, next 分別指向當前和下乙個節點

如圖所示: cur–>1, next–>2

反轉操作為:next.next-->cur

然後移動cur,next

一次反轉後: 當前為2, 下乙個為3

迴圈操作, 就完成了所有的反轉

指定範圍的鍊錶反轉

和全部反轉一樣, 相當於把鍊錶分為了三段, 反轉中間那段, 再將三段連線起來

所以只需要將反轉範圍的前乙個節點1和 反轉範圍內第乙個節點2(反轉後的最後乙個) 引用儲存下來, 用於反轉後的連線. 然後對中間的進行反轉

反轉操作完成後

所以最後需要讓節點1指向cur,2指向next, 就完成了

以下是**:

public

class

reverselink

}public

static

void

main

(string[

] args)

printlink

(head)

;// 反轉

node reversed =

reverse

(head,3,

5);printlink

(reversed);}

/** * 反轉從 begin 到 end 範圍的節點

* @param node 煉表頭結點

* @param begin 開始的位置

* @param end 結束位置

* @return 返回煉表頭結點

*/private

static node reverse

(node node,

int begin,

int end)

bnode = cur;

cur = cur.next;

} enode = cur;

node nnode = cur.next;

// 下乙個

node nnnode = null;

// 下下個

// 進行反轉

for(

int i =

0; i < end - begin; i++

) nnode = nnnode;}}

// 將反轉後的鍊錶和兩端連線

bnode.next = cur;

enode.next = nnnode;

return node;

}/**

* 列印鍊錶節點值

* @param head

*/private

static

void

printlink

(node head)

system.out.

println();}}

執行結果貼一下:

// 反轉前

0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> 11 -> 12 -> 13 -> 14 ->

// 反轉後

0 -> 1 -> 4 -> 3 -> 2 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> 11 -> 12 -> 13 -> 14 ->

反轉鍊錶Java

題目 定義乙個鍊錶,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。思路 反轉鍊錶時,為了保證鍊錶不斷開,需要儲存三個引用,指向前一結點的引用,當前結點的引用,指向後一結點的引用。反轉鍊錶 public static listnode reverselist listnode head r...

Java反轉鍊錶

需要記錄原煉表中三個連續的結點 reverse first second。在每輪迭代中,從原煉表中提取結點first並將它插入到逆鍊錶的開頭。同時需要一直保持first指向原煉表中所有剩餘結點的首節點,second指向原煉表中所有剩餘結點的第二個結點,reverse指向結果鍊錶中的首結點。publi...

演算法 鍊錶反轉和鍊錶內指定區間反轉

鍊錶反轉 輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。例如 輸入,返回。public listnode reverse listnode head return temp 鍊錶內指定區間反轉 將乙個鍊錶 m 位置到 n 位置之間的區間反轉,要求時間複雜度o n 空間複雜度o 1 例如 給出的鍊錶為 ...