61. Rotate List

来源:互联网 发布:指南针软件下载免费版 编辑:程序博客网 时间:2024/05/16 14:47

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次。关键是要找到list_size-k处的节点ptr和ptr的前驱节点pre和最后一个结点tail,然后使pre的next指向NULL,使tail的next指向head(即将前面部分接在后面部分的后面),使head指向ptr,最后返回head。


代码:

class Solution{public:ListNode* rotateRight(ListNode* head, int k){if(!head) return NULL;int size = 0;ListNode* ptr = head, * tail, * pre;do{size++;tail = ptr;}while(ptr = ptr->next);k = size - (k % size);if(k == size) return head;ptr = head;for(int i = 0; i < k; ++i){pre = ptr;ptr = ptr->next;}pre->next = NULL;tail->next = head;head = ptr;return head;}};


0 0
原创粉丝点击