一近她、題目
將鏈表L就地逆置叉瘩,即利用原表各結(jié)點的空間實現(xiàn)逆置。
二粘捎、思路
在鏈表的第二個元素開始執(zhí)行逆置薇缅,因為如果鏈表只有一個元素,那么逆置就沒有意義了攒磨。
步驟:
-
假設(shè)原鏈表如下:
-
將結(jié)點1的指針指向結(jié)點3泳桦,也就是說將結(jié)點2脫離鏈表:
-
將L鏈表的頭結(jié)點指針指向結(jié)點2娩缰,然后結(jié)點2變成第一個元素灸撰,結(jié)點2的指針指向結(jié)點1,此刻實現(xiàn)了第一個逆置。
-
重復(fù)上述2完疫、 3步,將結(jié)點3脫離鏈表亲轨,然后就可以接到頭結(jié)點之后趋惨,變成第一個元素。
-
結(jié)點4依舊是重復(fù)步驟2 惦蚊、 3器虾,將結(jié)點4接到頭結(jié)點之后;
重復(fù)循環(huán)蹦锋,就可以將結(jié)點元素實現(xiàn)逆置了兆沙。具體代碼見下:
四、具體代碼
/*
* 逆置鏈表L
*/
public void convert_List(Node L){
Node p,t;
p=L.next; //此時指針p指向鏈表L的第一個結(jié)點
while(p.next!=null){ //第二個結(jié)點不為空莉掂,因為逆置葛圃,需要鏈表有兩個及以上的元素逆置才有意義
t=p.next;
p.next=t.next; //此時跳過了t結(jié)點元素,也就是說t結(jié)點元素脫離了鏈表
t.next=L.next; //將t結(jié)點元素放在頭結(jié)點后面憎妙,即t結(jié)點元素成為第一個結(jié)點
L.next=t; //頭結(jié)點的指針指向t
}
}
五库正、總結(jié)
t=p.next; p.next=t.next; t.next=L.next; L.next=t;
這幾步看著會非常暈的,但是如果照著圖看厘唾,或者自己畫畫圖褥符,就能夠很容易理解了。while(p.next!=null)
原先p已經(jīng)指向第一個結(jié)點抚垃,現(xiàn)在p.next!=null
表示需要第二個結(jié)點不為空喷楣,鏈表逆置從第二個元素開始。