您的位置:首页 > 其它

061 - Rotate List

2015-12-30 16:33 190 查看
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
.

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k)
{
struct ListNode *first, *second, *newhead;
int i;

if (!head) return head;
first = second = head;

int total = 0;
while (first) {
first = first->next;
total++;
}
k %= total;
i = k;
first = head;
while (second && i--) second = second->next;
if (!k || !second) return head;
while (second->next) {
first = first->next;
second = second->next;
}

newhead = first->next;
first->next = NULL;
second->next = head;
head = newhead;
return newhead;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: