题目
解法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k) {
int i=1;
struct ListNode* cur =head,*p=head,*p1;
if(head == NULL || head->next == NULL || k==0)
return head;
while(cur->next!=NULL)
{
i++;
cur = cur->next;
}
k %= i;
if(k==0) //如果右移位置是长度的倍数,则返回原链表
return head;
cur->next = head;//将其改变为循环链表
k = i-k;
while(k--) //将节点p遍历到头节点
{
p = p->next;
}
p1=p;
i--;
while(i--) //将循环链表变为普通链表
{
p1 = p1->next;
}
p1->next = NULL;
return p;
}