声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
题目:给定一个链表,翻转该链表从m到n的位置,要求直接翻转而非申请新空间
如: 给定1->2->3->4->5, m=2,n=4, 返回1->4->3->2->5
假定给出的参数满足: 1<=m<=n<=链表长度
分析:
空转m-1次,找到第m-1个结点,即开始翻转的第一个结点的前驱,记做head
以head为起始结点遍历n-m次,将第i次时,将找到的结点插入的head的next中即可. 即头插法
Java版本的实现:
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;
}
}