rotate-list

来源:互联网 发布:网络音响系统布线图 编辑:程序博客网 时间:2024/06/14 06:30

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;}