如題,經(jīng)典問(wèn)題,記錄于此...
遞歸實(shí)現(xiàn)
思路:如果只有一個(gè)節(jié)點(diǎn),則什么都不做。否則,將當(dāng)前鏈表(a1,a2...a3)的子鏈表(a2,...an)進(jìn)行逆轉(zhuǎn),返回逆轉(zhuǎn)后的第一個(gè)節(jié)點(diǎn)的指針,再將a1節(jié)點(diǎn)加到a2節(jié)點(diǎn)后面。
代碼:(這里沒(méi)有使用頭節(jié)點(diǎn))
node * reverse(node * p){
if(p->next == null){
return p;
}
node * q = p->next;
node * head = reverse(q);
p->next = null;
q->next = p;
return head;
}
非遞歸實(shí)現(xiàn)
思路:一個(gè)指針進(jìn)行鏈表的遍歷,一個(gè)指針指向逆轉(zhuǎn)后的鏈表的第一個(gè)節(jié)點(diǎn),在遍歷的過(guò)程中,將當(dāng)前節(jié)點(diǎn)加入逆轉(zhuǎn)后的鏈表第一個(gè)元素即可。返回逆轉(zhuǎn)后的鏈表的第一個(gè)節(jié)點(diǎn)的指針。
代碼:(這里沒(méi)有使用頭節(jié)點(diǎn))
node * reverse(node * p){
node * p_reverse;
if(p != null){
p_reverse = p;
node * q = p->next;
p->next = null;
}
while(q != null){
p = q->next;
q->next = p_reverse;
p_reverse = q;
q = p;
}
}
對(duì)C語(yǔ)言用的太少,上面的代碼實(shí)現(xiàn)可能有點(diǎn)惡心,不過(guò)可以實(shí)現(xiàn)功能....
文章來(lái)源:
http://localhost/wp2/?p=150