链表翻转。给出一个链表和一个数k,比如,链表为1→2→3→4→5→6,k=2,则翻转后2→1→6→5→4→3,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现
import java.util.LinkedList;
public class RotateLinkedList {
public static void ReverseLinkList(LinkedList<Integer> link,int from, int to){
while(from<to){
int t=link.get(from);
link.set(from++, link.get(to));
link.set(to--,t);
}
}
public static void LeftRotateString(LinkedList<Integer> link,int n,int m)
{
m %= n; //若要左移动大于n位,那么和%n 是等价的
ReverseLinkList(link, 0, m - 1); //反转[0..m - 1],套用到上面举的例子中,就是X->X^T,即 abc->cba
ReverseLinkList(link, m, n - 1); //反转[m..n - 1],例如Y->Y^T,即 def->fed
}
public static void main(String[] args) {
LinkedList<Integer> link=new LinkedList<Integer>();
link.add(1);
link.add(2);
link.add(3);
link.add(4);
link.add(5);
link.add(6);
LeftRotateString(link,link.size(),8);
System.out.println(link);
}
}