LeetCode61.旋转链表

题目来源:

 https://leetcode-cn.com/problems/rotate-list/

题目描述:

LeetCode61.旋转链表

解法描述:

先遍历一遍,得出链表长度len,由于k可能会大于len,因此k%=len。将尾结点next指针指向首节点,形成一个环,接着往后跑len-k步,从这里断开,就是结果。

 代码如下:

class Solution {
public:
    ListNode *rotateRight(ListNode *head, int k) {
        if(head==NULL||k==0)
            return head;
        int len=1;
        ListNode *p=head;
        while(p->next){
            //遍历一遍,求出链表长度
            len++;
            p=p->next;
        }
        k=len-k%len;
        p->next=head;//首尾相连变成循环
        for(int step=0;step<k;step++){
            p=p->next;//接着往后跑
        }
        head=p->next;//新的首节点
        p->next=NULL;//断开环
        return head;
    }
};