Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given1->2->3->4->5->NULLand k =2,
return4->5->1->2->3->NULL.
这个题自己写的在牛客网未通过。。测试例程里给的{1,2},3。应该返回{2,1}??是我理解错题目了?按照我的理解,写的代码在vs里自己用测试例子测了一下应该是对的
代码:
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if (head == NULL || k == 0)
return head;
ListNode *pNode = head;
int len = 0;//计算长度
while (pNode != NULL) {
len++;
pNode = pNode->next;
}
int num = len - k; //正数第num个节点
if (num <= 0)
return head;
pNode = head;
ListNode *pre = head;
for (int i = 0; i < num; ++i) {
pre = pNode;
pNode = pNode->next;
}
ListNode *pHead = pNode;
for (int i = 1; i < k; ++i) {
pNode = pNode->next;
}
pNode->next = head;
pre->next = NULL;
return pHead;
}
};
int main() {
Solution S;
ListNode *head = new ListNode(1);
ListNode *t1 = new ListNode(2);
ListNode *t2 = new ListNode(3);
ListNode *t3 = new ListNode(4);
ListNode *t4 = new ListNode(5);
head->next = t1;
t1->next = t2;
t2->next = t3;
t3->next = t4;
ListNode * res = S.rotateRight(head, 6);
while (res != NULL) {
cout << res->val << endl;
res = res->next;
}
system("pause");
return 0;
}