今天的题还是比较简单的,是LeetCode第61题,题目说的是旋转单链表,也就是向右移动,不断吧末尾的节点移动到前面来
这个题,首先要对旋转的次数做一定的化简,如果是长度的倍,那就直接返回,如果不是再旋转,因此要求长度
相应地,链表为空或者旋转次数k为0,直接返回
然后就到了k<length的情况,这个时候可以采用双指针来解决,具体地代码吐下:
public static ListNode rotate(ListNode head,int k){ if (head==null||k==0)return head;//如果是head为空或者旋转次数k为0,直接返回 int length=0;//获得链表长度 ListNode temp=head; while (temp!=null){ length++; temp=temp.next; } k=k%length;//k对长度取余 if (k==0)return head; temp=head; ListNode node=head; while (k>0){ temp=temp.next; k--; } while (temp.next!=null){ head=head.next; temp=temp.next; } ListNode result=head.next; head.next=null; temp.next=node; return result; }