标签:
题目:
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
.
分类:LinkedList TwoPointers
代码:关键构造一个环再从相应位置断开
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* rotateRight(ListNode* head, int k) { 12 if(!head) 13 return head; 14 int length = 1; 15 ListNode *newHead, *tail; 16 newHead = tail = head; 17 //得到结点数 18 while(tail->next) 19 { 20 tail = tail->next; 21 length++; 22 } 23 //构造一个换 24 tail->next = head; 25 26 if(k %= length) 27 { 28 for(int i = 0; i < length - k; ++i) 29 tail = tail->next; 30 } 31 newHead = tail->next; 32 tail->next = NULL; 33 return newHead; 34 } 35 };
标签:
原文地址:http://www.cnblogs.com/zhangbaochong/p/5469137.html