聲明: 本總結(jié)僅為個(gè)人學(xué)習(xí)總結(jié)笆呆,以防止遺忘而作相寇,不得轉(zhuǎn)載和商用声诸。
題目:給定一個(gè)鏈表,翻轉(zhuǎn)該鏈表從m到n的位置脏款,要求直接翻轉(zhuǎn)而非申請新空間
如: 給定1->2->3->4->5, m=2,n=4, 返回1->4->3->2->5
假定給出的參數(shù)滿足: 1<=m<=n<=鏈表長度
分析:
空轉(zhuǎn)m-1次,找到第m-1個(gè)結(jié)點(diǎn),即開始翻轉(zhuǎn)的第一個(gè)結(jié)點(diǎn)的前驅(qū),記做head
以head為起始結(jié)點(diǎn)遍歷n-m次,將第i次時(shí),將找到的結(jié)點(diǎn)插入的head的next中即可. 即頭插法
Java版本的實(shí)現(xiàn):
public static void reverse(Node node, int from, int to){
Node pCur = node.next;
int i;
for(i=0;i<from-1;i++){
node = pCur;
pCur = pCur.next;
}
Node pPre = pCur;
pCur = pCur.next;
to--;
Node pNext;
for(;i<to;i++){
pNext = pCur.next;
pCur.next = node.next;
node.next = pCur;
pPre.next = pNext;
pCur = pNext;
}
}