问题描述:
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.
分析:这道题的题意,其实我没审明白,它的意思是说,有一个链表,然后以k为轴进行旋转,其中k是剩余的元素,也即,待旋转点距离最后一个点位置恰好为k(其实是k%len(list))。
代码如下:4ms
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k) {
int length = 0;
struct ListNode *headhead = head;
while(headhead){
length++;
headhead = headhead->next;
}
if(!length)
return head;
int index = k%length;
if(index==0)
return head;
struct ListNode *headheadhead = head;
headhead = head;
while(index--){
headheadhead = headheadhead->next;
}
while(headheadhead->next!=NULL){
headhead = headhead->next;
headheadhead = headheadhead->next;
}
struct ListNode *tmpHead = headhead->next;
headhead->next = NULL;
headheadhead->next = head;
head = tmpHead;
return head;
}