- 首先我要在纸上,非常非常聪明且迅速且机灵,
- 给出几个用例,找出边界用例和特殊用例,确定特判条件;在编码前考虑到所有的条件
- 向面试官提问:问题规模,特殊用例
- 给出函数头
- 暴力解,简述,优化。
- 给出能够想到的最优价
- 伪代码,同时结合用例
- 真实代码
Rotate List
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
.
/*
Rotate List
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.
*/
// By k places, means that move the last k nodes in the front of the list? Yes
// The k is bigger than the size of the list?
// The list is NULL
// 1->NULL
// 2->3->4->NULL
struct Node
{
Node* next;
T value;
}
Node* rotate (Node* head, int k)
{
if(head==NULL) return NULL;
int cnt = 0;
int size = -1;
Node* itr = head;
while(cnt < k) // assume that k < size first
{
itr = itr->next;
cnt++;
if(itr==NULL) // if k >= size, rest k, cnt, and itr, scan again
{
size = cnt;
k = k % size;
cnt = 0;
itr = head;
}
}
Node* itr2 = head;
while(itr->next!=NULL)
{
itr = itr ->next;
itr2 = itr2->next;
}
itr ->next = head;
itr2->next = NULL;
return itr;
}