如題,經(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