LeetCode 061. Rotate List

来源:互联网 发布:chromebook pixel mac 编辑:程序博客网 时间:2024/06/10 18:12

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.

这道题要求是将链表最后K个节点移到链表开头,其实挺简单的。

但是需要注意一点:当K大于链表长度的时候,必须从头开始遍历。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *rotateRight(ListNode *head, int k)     {        if(!head || k < 0)            return NULL;        if(k == 0)            return head;        ListNode * rear = head;        ListNode * fore = head;        ListNode * temp;        int i = 0;        while(i<k)        {            fore = fore->next;            if(!fore)   //k的长度大于链表长度                fore = head;            i++;        }        while(fore->next)        {            fore = fore->next;            rear = rear->next;        }        //此时rear指向待旋转节点的前一个节点        //fore指向最后一个节点        fore->next = head;        head = rear->next;        rear->next = NULL;        return head;    }};

因为while循环里面忘了写i++,硬是不知道哪儿出错了,最后在VS里面才调试出来,囧死!

测试代码:

int main(){int num[2]={1,2};struct ListNode *head = new ListNode(0);struct ListNode *temp = head;for(int i=0; i<2; i++){struct ListNode * p = new ListNode(num[i]);temp ->next = p;temp = p;}temp = head;head = head->next;delete temp;cout<<"原始链表:";temp = head;while(temp){cout<<temp->val<<" ";temp = temp->next;}cout<<endl;Solution sol;head = sol.rotateRight(head, 1);cout<<"操作后链表:";while(head){cout<<head->val<<" ";temp = head;head = head->next;delete temp;}cout<<endl;return 0;}


0 0